- A+
支持非泛型IEnumerable接口的类型(如ArrayList)
在C#中可为以下对象编写LINQ查询:SQLServer数据库、XML文档、ADO.NET数据集以及支持IEnumerable或泛型IEnumerable<T>接口的任何对象集合。
如果使用LINQ来查询非泛型IEnumerable集合(例如ArrayList),必须显式声明范围变量的类型,以反映集合中对象的特定类型。
• 查询变量本身只存储查询命令。
• 查询的实际执行将推迟到在foreach语句中循环访问查询变量之后进行。
• 此概念称为延迟执行。
• 对一系列源元素执行聚合函数的查询必须首先循环访问这些元素。
• 要强制立即执行任何查询并缓存其结果,可调用ToList或ToArray方法。
• 在LINQ中,由于延迟执行的特性,查询经过计算后才具有值。
• 调试器遇到查询声明时,调试器不会进入并单步执行该声明,而是将整个声明作为单个语句突出显示。
• 若要显示某个查询的结果,调试器必须计算该查询。
• 隐式计算的某些影响:计算都需要时间;计算查询可能产生副作用。
• 可以将谓词替换为对包含原始谓词代码的函数调用,以便达到调试目的。
• "编辑并继续"不支持对LINQ查询的更改。如果在调试会话过程中添加、移除或更改LINQ语句,则会出现一个对话框,告知您"编辑并继续"不支持该更改。
• 在C#中,不能对包含LINQ查询的方法中的任何代码使用"编辑并继续"。
避免null指针异常
• 如果源集合为null或包含值为null的元素,并且查询不处理null值,则在执行查询时将引发NullReferenceException。
• 左外部联接是这样定义的:返回第一个集合的每个元素,无论该元素在第二个集合中是否有任何相关元素。
• 可以使用LINQ通过对分组联接的结果调用DefaultIfEmpty方法来执行左外部联接。
匿名类型如何从函数返回?