linq-to-sql – 将Linq转换为Sql表达式到表达式树
发布时间:2020-05-24 19:54:46 所属栏目:MsSql 来源:互联网
导读:任何人都可以将这个简单的LINQ-to-SQL转换为表达式树: ListRegion lst = (from r in dc.Regions where r.RegionID 2 r.RegionDescription.Contains(ern) select r).ToList(); 这应该这样做:
|
任何人都可以将这个简单的LINQ-to-SQL转换为表达式树: List<Region> lst = (from r in dc.Regions
where r.RegionID > 2 && r.RegionDescription.Contains("ern")
select r).ToList();
解决方法这应该这样做:var query = dc.Regions.AsQueryable();
ParameterExpression pe = Expression.Parameter(typeof(Region),"region");
Expression id = Expression.PropertyOrField(pe,"RegionID");
Expression two = Expression.Constant(2);
Expression e1 = Expression.GreaterThan(id,two);
Expression description = Expression.PropertyOrField(pe,"RegionDescription");
MethodInfo method = typeof(string).GetMethod("Contains",new[] {typeof(string)});
Expression ern = Expression.Constant("ern",typeof(string));
Expression e2 = Expression.Call(description,method,ern);
Expression e3 = Expression.And(e1,e2);
MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable),"Where",new Type[] { query.ElementType },query.Expression,Expression.Lambda<Func<Region,bool>>(e3,new ParameterExpression[] { pe }));
var results = query.Provider.CreateQuery<Region>(whereCallExpression);
List<Region> lst = results.ToList();
要从结果集中选择RegionID,请执行以下操作: MethodCallExpression selectExpression = Expression.Call(
typeof(Queryable),"Select",new[]{ typeof(Region),typeof(int)},whereCallExpression,int>>(id,pe));
var regionIDsQuery = query.Provider.CreateQuery<int>(selectExpression);
List<int> regionIDs = regionIDsQuery.ToList(); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql-server – 一个事务中SQL Server中的备用同义
- SQL Server 高级应用 收藏版
- mysql导入sql文件报错 ERROR 2013 2006 2002
- SQL Server数据库管理员(DBA)的工作内容
- postgres中的sql – distinct()函数(不是select限
- 如何模糊SQL Sprocs?
- sql-server – 有条件地在SQL Server中创建用户
- entity-framework – 如何在Entity Framework中创
- sql – scope_identity vs ident_current
- 最长用最基本的SQL Server数据库备份与还原
热点阅读
