支持非泛型IEnumerable接口的类型(如ArrayList)

  在C#中可为以下对象编写LINQ查询:SQLServer数据库、IEnumerable或泛型IEnumerable接口的任何对象集合。

  如果使用LINQ来查询非泛型IEnumerable集合(例如ArrayList),必须显式声明范围变量的类型,以反映集合中对象的特定类型。

  Linq进阶的几个小知识点_第1张图片  

  如何使用LINQ查询ArrayList(C#)   

 

LINQ的查询执行

延迟执行

• 查询变量本身只存储查询命令。

• 查询的实际执行将推迟到在foreach语句中循环访问查询变量之后进行。

• 此概念称为延迟执行。

强制立即执行

• 对一系列源元素执行聚合函数的查询必须首先循环访问这些元素。

• 要强制立即执行任何查询并缓存其结果,可调用ToList或ToArray方法。

延迟执行的陷阱

 

调试LINQ

• 在LINQ中,由于延迟执行的特性,查询经过计算后才具有值。

• 调试器遇到查询声明时,调试器不会进入并单步执行该声明,而是将整个声明作为单个语句突出显示。

Linq进阶的几个小知识点_第2张图片

• 若要显示某个查询的结果,调试器必须计算该查询。

Linq进阶的几个小知识点_第3张图片

• 隐式计算的某些影响:计算都需要时间;计算查询可能产生副作用。

• 可以将谓词替换为对包含原始谓词代码的函数调用,以便达到调试目的。

Linq进阶的几个小知识点_第4张图片

• "编辑并继续"不支持对LINQ查询的更改。如果在调试会话过程中添加、移除或更改LINQ语句,则会出现一个对话框,告知您"编辑并继续"不支持该更改。

• 在C#中,不能对包含LINQ查询的方法中的任何代码使用"编辑并继续"。

虽然经过测试,好像并不是这样。。。

 

避免null指针异常

在查询表达式中处理null值

• 如果源集合为null或包含值为null的元素,并且查询不处理null值,则在执行查询时将引发NullReferenceException。

• C#可空类型(Nullable)

执行左外部联接

• 左外部联接是这样定义的:返回第一个集合的每个元素,无论该元素在第二个集合中是否有任何相关元素。

• 可以使用LINQ通过对分组联接的结果调用DefaultIfEmpty方法来执行左外部联接。

   

匿名类型如何从函数返回?

Linq进阶的几个小知识点_第5张图片

Linq进阶的几个小知识点
文章转载:http://www.shaoqun.com/a/464518.html