背景:在接下来的一个月里,我将做三次关于LINQ的演讲,或者至少将LINQ包含在c#的上下文中。我想知道哪些话题值得花相当多的精力,这取决于人们可能很难理解哪些话题,或者他们可能有错误的印象。我不会具体讨论LINQ to SQL或实体框架,只是作为如何使用表达式树(通常是IQueryable)远程执行查询的示例。

那么,你发现LINQ有什么难的地方吗?在误解方面你看到了什么?例子可能是以下任何一个,但请不要限制自己!

c#编译器如何处理查询表达式 Lambda表达式 表达式树 扩展方法 匿名类型 这个IQueryable 延迟执行与立即执行 流与缓冲执行(例如,OrderBy被延迟但被缓冲) 隐式类型局部变量 读取复杂的泛型签名(例如Enumerable.Join)


当前回答

我认为在LINQ中最重要的一点是如何让自己陷入性能方面的麻烦。例如,使用LINQ的计数作为循环条件是非常非常不明智的。

其他回答

延迟加载。

如前所述,延迟加载和延迟执行

LINQ to object和LINQ to XML (IEnumerable)与LINQ to SQL(IQueryable)有何不同

如何建立一个数据访问层,业务层,和表示层与LINQ在所有层....这是个很好的例子。

理解Linq提供者之间的抽象何时泄漏。有些东西适用于对象,但不适用于SQL(例如,. takewhile)。一些方法可以被翻译成SQL (ToUpper),而另一些则不能。有些技术在对象中更有效,而其他技术在SQL中更有效(不同的连接方法)。

对于LINQ2SQL:熟悉一些生成的SQL并编写可以转换为良好(快速)SQL的LINQ查询。这是知道如何平衡LINQ查询的声明性和它们需要在已知环境(SQL Server)中快速执行的真实性这一更大问题的一部分。

你可以得到一个完全不同的SQL生成查询通过改变一个很小很小的东西在LINQ代码。如果您正在基于条件语句创建表达式树(即添加可选的过滤条件),这可能特别危险。

我认为人们对LINQ的误解在于它是一种语言扩展,而不是数据库扩展或构造。

LINQ不仅仅是LINQ to SQL。

现在我们大多数人都在集合上使用了LINQ,我们再也不会回去了!

LINQ是。net自2.0的泛型和3.0的匿名类型以来最重要的特性。

现在我们有了Lambda,我等不及要进行并行编程了!