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

目录
相关文章
|
3月前
|
测试技术
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【编译原理】语法分析:从顶向下、最左推导
【编译原理】语法分析:从顶向下、最左推导
|
4月前
|
算法 编译器 C语言
learn_C_deep_11 (深刻理解整形提升、左移和右移规则、花括号、++和--操作、表达式匹配:贪心算法)
learn_C_deep_11 (深刻理解整形提升、左移和右移规则、花括号、++和--操作、表达式匹配:贪心算法)
|
算法
表达式转换-中缀转后缀表达式后计算-数据结构与算法
表达式转换-中缀转后缀表达式后计算-数据结构与算法
335 0
表达式转换-中缀转后缀表达式后计算-数据结构与算法
|
存储 C语言 索引
【C】操作符归纳+表达式运算原理
【C】操作符归纳+表达式运算原理
198 0
【C】操作符归纳+表达式运算原理
表达式树练习实践:C# 五类类运算符的表达式树表达
表达式树练习实践:C# 五类类运算符的表达式树表达
98 0
【数理逻辑】谓词逻辑 ( 判断一阶谓词逻辑公式真假 | 解释 | 示例 | 谓词逻辑公式类型 | 永真式 | 永假式 | 可满足式 | 等值式 )
【数理逻辑】谓词逻辑 ( 判断一阶谓词逻辑公式真假 | 解释 | 示例 | 谓词逻辑公式类型 | 永真式 | 永假式 | 可满足式 | 等值式 )
378 0
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(三)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(三)
671 0
|
自然语言处理
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
670 0
|
机器学习/深度学习
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(二)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(二)
469 0