博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并两个 Lambda 表达式
阅读量:4994 次
发布时间:2019-06-12

本文共 1683 字,大约阅读时间需要 5 分钟。

概述

  在开发工作中,有些时候需要对一些增删改查进行封装(用 Lambda 表达式来筛选数据),但是又有一部分条件总是相同的,对于相同的部分可以直接写到方法里,而不同的部分作为参数传进去。

定义扩展方法:

  public static class Ext      {              public static Expression
> AndAlso
( this Expression
> a, Expression
> b)    {    var p = Expression.Parameter(typeof(T), "x");    var bd = Expression.AndAlso(Expression.Invoke(a, p), Expression.Invoke(b, p));    var ld = Expression.Lambda
>(bd, p);    return ld;    }   }

定义 Person 类

class Person    {        ///         /// 性别        ///         public string Sex { get; set; }        ///         /// 年龄        ///         public int Age { get; set; }        ///         /// 身高        ///         public int Height { get; set; }    }

扩展方法调用

List
persons = new List
() { new Person{ Sex = "男", Age = 22, Height = 175}, new Person{ Sex = "男", Age = 25, Height = 176}, new Person{ Sex = "男", Age = 19, Height = 175}, new Person{ Sex = "女", Age = 21, Height = 172}, new Person{ Sex = "女", Age = 20, Height = 168} }; Expression
> e1 = p => p.Age >= 21 && p.Sex == "男"; Expression
> e2 = p => p.Height > 170; Expression
> e3 = e1.AndAlso(e2); var ls = persons.Where(e3.Compile()).ToList();

扩展使用

  在上述例子中,通过扩展方法可以进行以下使用:封装一个方法,参数类型为 Expression<Func<Person, bool>> ,然后,将 e2、e3 及查询过程封装到方法里面,这样查询的时候只需要传入参数 “p => p.Age >= 21 && p.Sex == "男"”就可以实现上述实例中的查询。

转载于:https://www.cnblogs.com/zhangchaoran/p/10217982.html

你可能感兴趣的文章
Python基础 --- 使用 dict 和 set
查看>>
仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
查看>>
Python之数据结构基础
查看>>
WPF:如何高速更新Model中的属性
查看>>
hdu 1010(DFS) 骨头的诱惑
查看>>
(转)Android SDK Manager国内无法更新的解决方案
查看>>
SQL语句修改表
查看>>
ubutnu 挂载磁盘
查看>>
continue 和 break的实例
查看>>
Java学习笔记()ArrayList
查看>>
redis缓存清除
查看>>
django Highcharts制作图表--显示CPU使用率
查看>>
文本处理 tr ,col,join,paste
查看>>
oracle权限
查看>>
java方法的虚分派和方法表
查看>>
【转】字符串和浮点数格式化输出小结
查看>>
Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
查看>>
对测试人员或开发人员来说相互沟通有多重要?
查看>>
解释器、编译器以及他们之间的差别。
查看>>
MongoDB的快速手动安装
查看>>