本文将介绍在LINQ to Entities 中3种构建谓词表达式的方法
测试类:
1.链式操作符 Chaining query operators
条件一:车是红色
条件二:车的价钱小于10.0
想要同时满足以上两个条件,可以使用Where方法链式操作:
如果想要满足以上任意一个条件,可以使用Union方法:
但是Union本身会带来效率问题,并且会消除结果中的一些重复项
2.使用原生API构建表达式 Build expressions manually
LINQ 表达式 API 包含一些工厂方法,我们可以手动调用:
可以看到这种方式很不方便,写起来相当麻烦,因此我们将探索使用第3种方式
3.组合Lambda表达式
C# 3.0 book中介绍了一种组合Lambda表达式的方法:
参照Matt Warren的系列文章IQueryable Provider 中包含对ExpressionVisitor 的实现,我们可以重写表达式树,以下是实现参数重新绑定的类:
现在,我们可以写一个工具类在不使用invoke的情况下实现组合lambda表达式,并且提供EF友好的And和Or方法:
使用lambda表达式组合,我们可以这样写: