Linq Lambda表达式概括

开发 后端
这里介绍Linq Lambda表达式,伟大的Microsoft又给我们提供了一种更简洁的写法,这也就是我们所说的Linq Lambda表达式了。

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

Linq Lambda表达式

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

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

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

“=>”左边的就是我们上面匿名方法的参数列表,右边的是方法里,实际上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.  
  6. //5 C#3.0里面的Where扩展方法(专门给实现了IEnumerable接口的类做扩展)  
  7. var result = classes.Where(c => c.Name == className);  
  8. foreach (var item in result)  
  9. {  
  10. Console.WriteLine(item.ID+ " " + item.Name);  
  11. }  
  12.  

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

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

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

【编辑推荐】

  1. LINQ to SQL查询分析
  2. LINQ查询架构简单介绍
  3. LINQ to SQL映射关系概述
  4. LINQ To SQL对象模型浅析
  5. LINQ to SQL映射列描述
责任编辑:佚名 来源: IT168
相关推荐

2009-09-15 17:30:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-11 09:48:27

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-09 17:14:17

Linq lambda

2009-09-17 09:09:50

Lambda表达式Linq查询

2009-09-11 12:32:33

LINQ表达式

2009-09-10 15:35:07

LINQ查询表达式

2011-10-28 16:34:13

LINQ

2009-09-17 14:21:19

LINQ表达式

2009-09-09 17:45:07

Linq表达式

2022-12-05 09:31:51

接口lambda表达式

2009-08-27 09:13:28

LINQ查询表达式

2009-09-07 17:18:33

LINQ查询表达式

2009-09-17 09:15:49

Linq表达式树

2009-09-11 09:53:16

Linq查询表达式

2009-09-17 11:08:55

LINQ查询表达式

2009-08-27 09:44:59

C# Lambda表达

2012-06-26 10:03:58

JavaJava 8lambda
点赞
收藏

51CTO技术栈公众号