LinqLambda表达式概括

在向大家详细介绍Linq之前,首先让大家了解下Linq Lambda表达式,以后全面介绍Linq。

乌什ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

Linq Lambda表达式

接下来我们通过一个例子来看一下Linq Lambda表达式:我们现在想给ClassCollection增加一个过滤方法,方法的目的是能够过滤返回班级名称为“***一班”的集合来。

1.伟大的Microsoft又给我们提供了一种更简洁的写法,这也就是我们所说的Linq Lambda表达式了:

 
 
 
  1. private static void LambdaLinq()
  2. {
  3. var classes = GetClasses();
  4. string className = "***一班";
  5. //4 C#3.0 Lambda表达式
  6. var result = classes.Filter(c=> c.Name == className);
  7. foreach (var item in result)
  8. {
  9. Console.WriteLine(item.ID+ " " + item.Name);
  10. }
  11. }

“=>”左边的就是我们上面匿名方法的参数列表,右边的是方法里,实际上Linq Lambda表达式也可以写成如下形式:

 
 
 
  1. Class c => c.Name == className
  2. (Class c) => c.Name == className
  3. (Class c) => {return  c.Name == className;}
  4. (x,y)=>x+y;//多参数

等等,函数的返回类型也是由编译器根据"=>"右边的表达式自动推断出来的。

而且需要提到的是由于Filter是扩展方法的缘故,而且Filter方法返回类型是ClassCollection,所以可以无限扩展下去,例如

 
 
 
  1. var result = classes.Filter( c => c.Name == className).Filter(c=>c.ID>1);

这就是扩展方法的魅力所在!

2.实际上不知不觉,我们已经实现了Linq里面的一个Where功能了,然后会发现classes这个实例会增加了很多扩展方法例如Where,OrderBy,这些方法实际上就是一些给实现了IEnumerable接口的类型的扩展方法,说白了就是针对集合类型的一些相关方法,比如过滤、排序、合并、分组等方法,这些方法的返回类型依然是IEnumerable(大家可以把光标移动到Where方法上,然后调用“转到定义”去看看这些方法的定义就明白了)当然这些方法都离不开我们的Lambda表达式做参数。

 
 
 
  1. private static void LambdaLinq()
  2. {
  3. var classes = GetClasses();
  4. string className = "***一班";
  5. //5 C#3.0里面的Where扩展方法(专门给实现了IEnumerable接口的类做扩展)
  6. var result = classes.Where(c => c.Name == className);
  7. foreach (var item in result)
  8. {
  9. Console.WriteLine(item.ID+ " " + item.Name);
  10. }
  11. }

3.这样写针对IEnumarable类型的查询其实已经不错了,微软觉得还不过瘾,又提供了我们传说中的Linq Lambda表达式

 
 
 
  1. private static void LambdaLinq()
  2. {
  3. var classes = GetClasses();
  4. string className = "***一班";
  5. //6 Linq查询表达式
  6. var result = from c in classes where 
    c.Name==className orderby c.ID select c;
  7. foreach (var item in result)
  8. {
  9. Console.WriteLine(item.ID+" "+item.Name);
  10. }
  11. }

到这时候你还认识原来的扩展方法吗?所以说语言的抽象确实很好用,和人的思维很接近,但是我们还是要看到它的本质,其实它的本质都是面向对象的一些东西,并没有创造出一些什么新的东西来,这样我们才可以真正理解语言。

名称栏目:LinqLambda表达式概括
网站路径:http://www.mswzjz.com/qtweb/news42/172942.html

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

广告

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