前言
在C#/.NET应用程序编程开发中,LINQ是操作集合数据的强有力工具,我们可以使用LINQ对集合数据进行排序、求和、取最大值/最小值、筛选符合条件的子集合等等操作。
其中lambda表达式是完成上述这一系列操作的基础,每一个LINQ的静态扩展方法均支持lambda表达式参数,比如我们有一个用户(Customer)实体类:
初始化一个Customer集合:
现要从这个用户集合(_customers)中查询Age<13
的所有用户(Customer),我们可以使用如下的lambda表达式:
输出结果:
这是我们预料的输出结果。
产品经理告诉你他需要更加细化的数据,需要筛选出用户年龄Age<13
并且用户状态Status=1
的用户,这时我们可以这样添加查询条件:
输出结果:
以上的查询条件都是在事先知道的情况下硬编码的,那如果查询条件不是固定的,也就是只有条件在满足某种情况时才追加lambda表达式,我们应该如何动态创建lambda查询表达式呢?比如我将查询用户提取成如下的方法:
模拟的请求参数实体类为:
现要求完成以下的动态查询:
如何实现以上的动态lambda表达式查询呢?
PredicateBuilder
这里为大家提供一个可以动态创建lambda表达式的帮助类PredicateBuilder
,代码如下:
完成了PredicateBuilder
的帮助类之后,我们只需引入类所在的命名空间,然后创建一个默认的表达式,之后便可使用它的静态扩展方法And
,Or
或者Not
来动态创建lambda表达式了,调用方式:
感谢你的阅读,我是Rector。
如果你觉得本文对你有帮助,还请手动为我点个赞,谢谢!!!
源码下载
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册