LinqLambda表达式详细介绍

C#3.0有很多值得学习的地方,这里我们主要介绍Linq查询,包括介绍Linq Lambda表达式等方面。

创新互联是一家集网站建设,建湖企业网站建设,建湖品牌网站建设,网站定制,建湖网站建设报价,网络营销,网络优化,建湖网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

C#3.0时代的Linq查询语句

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

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

 
 
 
  1. static IEnumerable
  2. GoldWatch(IEnumerable employees) {
  3. return Filter(employees,
  4. employee => employee.Years>3
  5. );
  6. }
  7.  
  8. static IEnumerable
  9. SalesForce(IEnumerable employees) {
  10. return Filter(employees,
  11. employee => employee.Department=="Sales"
  12. );
  13. }

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

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

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

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

 
 
 
  1. static IEnumerable
  2. Filter(this IEnumerable employees, Choose choose) {
  3. foreach (Employee employee in employees) {
  4. if (choose(employee)) {
  5. yield return employee;
  6. }
  7. }
  8. }
  9.  
  10. static IEnumerable
  11. GoldWatch(this IEnumerable employees) {
  12. return employees.Filter(employee => employee.Years>3);
  13. }
  14. static IEnumerable
  15. SalesForce(this IEnumerable employees) {
  16. return employees.Filter(
  17. employee => employee.Department=="Sales");
  18. }

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

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

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

当前标题:LinqLambda表达式详细介绍
当前网址:http://www.mswzjz.com/qtweb/news26/173976.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联