本篇内容介绍了“Linq Lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司是一家专业提供浦江企业网站建设,专注与成都网站建设、做网站、H5网站设计、小程序制作等业务。10年已为浦江众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
C#3.0时代的Linq查询语句
在C#3.0中我们又有了改善代码的新工具。
匿名委托很不错,但是我们希望有更简单的,更容易维护的代码。C#3.0提供了Linq Lambda表达式的概念,你可以把Linq Lambda表达式是我们应用匿名委托的捷径,下面是用Linq Lambda表达式重写的查询:
static IEnumerableGoldWatch(IEnumerable employees) { return Filter(employees, employee => employee.Years>3 ); } static IEnumerable SalesForce(IEnumerable employees) { return Filter(employees, employee => employee.Department=="Sales" ); }
这段代码相当简单而且也很容易维护,但还存在一些问题。
◆GoldWatch(employees)
◆SalesForce(employees)
当你看到这样的调用的时候就会意识到这个问题,从OO的视角来看,我们已经熟悉了noun.verb()这样的调用形式,理想情况下,我们希望用这样的语法能查询一个集合:
◆employees.GoldWatch()
◆employees.SalesForce()
有人可能会定义一个新的Employee类,它实现了IEnumerable
C#3.0用扩展方法(Extension method)解决这个方法:
static IEnumerableFilter(this IEnumerable employees, Choose choose) { foreach (Employee employee in employees) { if (choose(employee)) { yield return employee; } } } static IEnumerable GoldWatch(this IEnumerable employees) { return employees.Filter(employee => employee.Years>3); } static IEnumerable SalesForce(this IEnumerable employees) { return employees.Filter( employee => employee.Department=="Sales"); }
这看起来很好了,但如果我们想象Employee一样查询Customer呢?或者说,查询我们的存货呢?
不用为每一个类单独写一个Filter方法,我们可以将Filter写成一个通用函数:
delegate bool Choose(T t); static IEnumerable Filter (this IEnumerable items, Choose 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 arg0); public static IEnumerable Where (this IEnumerable source, Func predicate) { foreach (T element in source) { if (predicate(element)) yield return element; } }
“Linq Lambda表达式怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!