Expression 表达树的使用

简介: Expression 表达树的使用

通常我们在调用一个方法时我们可以传递不同类型的参数,比如int、string、list集合等,但是我们观察C#里的一些方法就会发现比如linq里面的Where,里面的参数是以Lambda表达式来传入的,那么我们自定义的方法如何也借用这种方式去实现呢?如下:


OrderCountModel GetSqlListCountForMob<T>(string userId, List<Expression<Func<T_O_Conv_HeaderModel, bool>>> expWhereList, Expression<Func<T_O_Conv_HeaderModel, T>> expOrder);


我们定义了一个名为GetSqlListCountForMob的方法,返回一个OrderCountModel,改方法的输出参数依次是userid、Lambda表达式、Lambda表达式,其中Lambda表达式内部使用对象是T_O_Conv_HeaderModel类型,第一个表达式第二个参数返回bool类型,第二个表达式第二个参数返回泛型T。


我们再来看看调用:

  

 

外层调用时使用表达式参数即可,如p=>p.OrderStates==1。这里我外层包了list存了多个lambda,原理是同样的,底层会遍历集合。


顺带说一下泛型T,存在我们使用表达式时不确定表达式里返回的实际类型, 因此我们在定义时可以用泛型T指定,细看第二个表达式的定义,结构是:


方法名<T>(Expression<Func<T_O_Conv_HeaderModel, T>)


如此便可完成很多公共方法的设计,很实用,尤其是对泛型T的运用。

 

以上,小计一下,方便后续查阅。

PS:楼主邮箱 tccwpl@163.com

目录
相关文章
|
6月前
|
C#
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression&lt;Func&lt;T, bool&gt;&gt;`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为&quot;John&quot;的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
245 1
|
6月前
leetcode-1614:括号的最大嵌套深度
leetcode-1614:括号的最大嵌套深度
42 0
Leecode 1111. 有效括号的嵌套深度
Leecode 1111. 有效括号的嵌套深度
50 0
LeetCode 1614. 括号的最大嵌套深度
如果字符串满足以下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS)
107 0
|
SQL 算法
多层嵌套子查询的unnesting算法解析
嵌套子查询的背景实践中,经常会遇到多层嵌套的SQL,并且多层嵌套之间包含有聚集函数,执行这类SQL的最简单的方法就是一层一层嵌套执行,类似于Nested Loop Join,对于外查询的每一行数据,就要将子查询执行一遍,如果子查询还有孙查询,子查询中的每一行,还要将孙查询执行一遍,……,显尔易见,这种执行方式的效率通常都比较低,尤其是当表的数据量很大时,对性能的影响非常明显。 下面是一个嵌套查询的
|
算法
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
130 0
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
表达式树练习实践:C# 五类类运算符的表达式树表达
表达式树练习实践:C# 五类类运算符的表达式树表达
123 0
|
自然语言处理
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
797 0
|
机器学习/深度学习
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(二)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(二)
605 0