温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linq Lambda表达式怎么使用

发布时间:2021-12-01 16:13:30 来源:亿速云 阅读:106 作者:iii 栏目:编程语言

本篇内容介绍了“Linq Lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

C#3.0时代的Linq查询语句

在C#3.0中我们又有了改善代码的新工具。

匿名委托很不错,但是我们希望有更简单的,更容易维护的代码。C#3.0提供了Linq Lambda表达式的概念,你可以把Linq Lambda表达式是我们应用匿名委托的捷径,下面是用Linq Lambda表达式重写的查询:

static IEnumerable<Employee> GoldWatch(IEnumerable<Employee> employees) {  return Filter(employees,  employee => employee.Years>3  );  }     static IEnumerable<Employee> SalesForce(IEnumerable<Employee> employees) {  return Filter(employees,  employee => employee.Department=="Sales"  );  }

这段代码相当简单而且也很容易维护,但还存在一些问题。
◆GoldWatch(employees)
◆SalesForce(employees)

当你看到这样的调用的时候就会意识到这个问题,从OO的视角来看,我们已经熟悉了noun.verb()这样的调用形式,理想情况下,我们希望用这样的语法能查询一个集合:
◆employees.GoldWatch()
◆employees.SalesForce()

有人可能会定义一个新的Employee类,它实现了IEnumerable<Employee>。但是问题是,我们的用户可能会希望是用别的 IEnumerable<Employee>实现,比如Employee[]和List<Employee>。

C#3.0用扩展方法(Extension method)解决这个方法:

static IEnumerable<Employee> Filter(this IEnumerable<Employee> employees, Choose choose) {  foreach (Employee employee in employees) {  if (choose(employee)) {  yield return employee;  }  }  }     static IEnumerable<Employee> GoldWatch(this IEnumerable<Employee> employees) {  return employees.Filter(employee => employee.Years>3);  }   static IEnumerable<Employee> SalesForce(this IEnumerable<Employee> employees) {  return employees.Filter(  employee => employee.Department=="Sales");  }

这看起来很好了,但如果我们想象Employee一样查询Customer呢?或者说,查询我们的存货呢?

不用为每一个类单独写一个Filter方法,我们可以将Filter写成一个通用函数:

delegate bool Choose<T>(T t);   static IEnumerable<T> Filter<T>(this IEnumerable<T> items, Choose<T> choose) {  foreach (T item in items) {  if (choose(item)) {  yield return item;  }  }  }   //现在我们可以筛选我们希望的任何类型了!   int [] a = new int [] {1,2,3,4,5};  a.Filter(i => i==1 || i==3);   //这个筛选方法是如此有用且通用,C#里已经内置了一个称为Where的实现  //在PDC上展示的实际的Where实现   public delegate T Func<A0, T>(A0 arg0);   public static  IEnumerable<T> Where<T>(this IEnumerable<T> source,  Func<T, bool> predicate) {  foreach (T element in source) {  if (predicate(element)) yield return element;  }  }

“Linq Lambda表达式怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI