加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

linq-to-sql – 将Linq转换为Sql表达式到表达式树

发布时间:2021-02-21 01:29:21 所属栏目:MsSql教程 来源:网络整理
导读:任何人都可以将这个简单的LINQ-to-SQL转换为表达式树: ListRegion lst = (from r in dc.Regions where r.RegionID 2 r.RegionDescription.Contains("ern") select r).ToList(); 解决方法 这应该这样做: var query = dc.Regions.AsQueryable();ParameterExpr

任何人都可以将这个简单的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();

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读