首页 新闻 会员 周边 捐助

如何拼接Expression查询条件

0
悬赏园豆:5 [已解决问题] 解决于 2016-09-13 09:14

  在执EF多条件查询的时候,如果查询字段比较多、查询比较复杂需要动态的构建Expression条件,怎样将这些条件拼接在一起?

在论坛中查了一些关于《动态Lambda表达式》的例子,都比较复杂,有没有什么简便的方法?

望高手赐教!

比如下面的三个查询条件:

Expression<Func<Model.PM_PickStore, bool>> predicate1 = null;

if (PlanNo == "") { predicate1= o => o.DevID == 1; }

Expression<Func<Model.PM_PickStore, bool>> predicate2 = null;

if (PlanNo == "") { predicate2 = o => o.DevID == 2; }

Expression<Func<Model.PM_PickStore, bool>> predicate3 = null;

if (PlanNo == "") { predicate3 = o => o.DevID == 3; }

德展自动化的主页 德展自动化 | 菜鸟二级 | 园豆:206
提问于:2016-09-12 18:17
< >
分享
最佳答案
0
收获园豆:5
顾晓北 | 专家六级 |园豆:10898 | 2016-09-13 08:53

非常感谢!!!

德展自动化 | 园豆:206 (菜鸟二级) | 2016-09-13 09:12
其他回答(2)
0

不是用linq吗.是要自己做表达式树解析?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-09-12 18:26
0

转换下,大概如下:

var expression = Expression.Equal(Expression.Constant(1), Expression.Constant(1));
var parameterExpression = Expression.Parameter(typeof(Model.PM_PickStore), "p");
var propertyExpression = Expression.Property(parameterExpression, "DevID");
if (PlanNo == "") { expression = Expression.AndAlso(expression, Expression.Equal(propertyExpression, Expression.Constant(1)));}
if (PlanNo == "") { expression = Expression.AndAlso(expression, Expression.Equal(propertyExpression, Expression.Constant(2))); }
if (PlanNo == "") { expression = Expression.AndAlso(expression, Expression.Equal(propertyExpression, Expression.Constant(3))); }

jello chen | 园豆:7336 (大侠五级) | 2016-09-13 08:37

谢谢您的赐教!

我在网上找了一个封装的方法,通过下面的代码可以实现了

    var list = new List<Expression<Func<Model.PM_PickStore, bool>>>();
            list.Add(o => true);
            if (DevID != 0) list.Add(o => o.DevID == DevID);
            if (StoreID != 0) list.Add(o => o.StoreID == StoreID);
            if (PlanNo != "") list.Add(o => o.PlanNo.Equals(PlanNo));
            Expression<Func<Model.PM_PickStore, bool>> productQueryTotal = null;
            foreach (var expression in list)
            {
                productQueryTotal = expression.And(expression);
            }

现在有个问题:进行模糊查询用什么方法,比如查PlanNo中含有“PL”字符的项

支持(0) 反对(0) 德展自动化 | 园豆:206 (菜鸟二级) | 2016-09-13 08:55

用Contains应该可以吧?

支持(0) 反对(0) 德展自动化 | 园豆:206 (菜鸟二级) | 2016-09-13 08:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册