Linq本质简单分析

开发 后端
这里介绍Linq本质,本文的目的是帮助大家搞清楚C#3.0里面的Linq查询表达式的来龙去脉,建议大家看完Linq查询后再看各个语法新特性对Linq的意义,这样会更加有帮助一些。

本文向大家介绍Linq本质,可能好多人还不了解Linq本质,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

本文的目的是帮助大家搞清楚C#3.0里面的Linq查询表达式的来龙去脉,搞清楚以后对C#3.0的新特性基本上也就了然于胸了。建议大家看完Linq查询后再看各个语法新特性对Linq的意义,这样会更加有帮助一些。

1.匿名类型

  1. private static void AnonymousType()  
  2. {  
  3. var v = new { Name = "张三"Sex = true };  
  4. //无须显示声明一个类,而且在初始化器里面可以获取上下文的变量——闭包  
  5. Console.WriteLine(v.Name);  

Linq本质:有了匿名类型后我们不需要显示的声明一个类型了,这个类型由C#编译器自动生成,而且利用了初始化器和var的新特性对Linq的意义:和初始化器结合起来构造查询结果集合里面的新元素类型。

2.扩展方法

比如我们现在想给int类型增加(扩展)一个方法,判断一个整数自身是否偶数,我们期望的语法是这样的:

  1. private static void ExtendMethod()  
  2. {  
  3. int i = 2;  
  4. Console.WriteLine(i.IsEven());  

注意原来int原来是没有IsEven()这个方法的,要实现这个方法,必须写一个静态类和一个静态方法:

  1. static class MyExtention  
  2. {  
  3. public static bool IsEven(this int num)  
  4. //this 表示针对int的实例和索引器的this的含义是一样的,int表示给int这种类型进行扩展  
  5. {  
  6. return num % 2 == 0;  
  7. }  
  8.  

Linq本质:编译i.IsEven()的本质是C#编译器生成了了MyExtention.IsEven(i)的代码,实际上仍然没有破坏类型的结构,并不是真的象语法那样平白无故给int增加了一个IsEven()方法,和设计模式里面的Visitor模式动态注入方法还是有区别的。

【编辑推荐】

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

2009-09-15 14:58:26

Linq查询本质

2009-09-08 13:16:01

Linq to SQL

2009-09-17 11:29:50

Linq扩展方法

2009-09-10 17:53:50

LINQ是什么

2009-09-08 17:01:54

Linq源元素

2009-09-11 09:41:19

LINQ to SQL

2009-09-08 10:50:20

2009-09-09 15:28:43

Linq to obj

2009-09-15 16:26:36

Linq orderb

2009-09-10 16:28:17

LINQ查询

2009-09-18 16:00:07

LINQ架构

2009-09-14 10:57:46

LINQ入门

2009-09-09 14:20:49

LINQ To Luc

2009-09-15 09:39:38

LINQ查询架构

2009-09-14 10:20:52

LINQ查询语法

2009-09-07 17:46:18

LINQ高级特性

2009-09-07 17:05:10

LINQ进行查询

2009-09-11 10:20:36

Linq扩展方法

2009-09-17 11:35:40

Linq匿名类型

2009-09-09 15:10:35

LINQ查询句法
点赞
收藏

51CTO技术栈公众号