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

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

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


当前回答

一些错误消息,特别是从LINQ到SQL的错误消息可能非常令人困惑。露齿而笑

和其他人一样,我也被推迟执行的问题困扰过几次。我认为对我来说最困惑的事情是SQL Server查询提供程序,以及你能用它做什么和不能做什么。

我仍然惊讶于你不能在有时为空的小数/货币列上执行Sum()。使用DefaultIfEmpty()是行不通的。:(

其他回答

我认为Lambda表达式可以解析表达式树和匿名委托的事实,因此您可以将相同的声明性Lambda表达式传递给IEnumerable<T>扩展方法和IQueryable<T>扩展方法。

它不仅仅是LINQ to SQL,它的特性也不仅仅是嵌入在语言中的SQL解析器。

我发现“创建一个表达式树”很难。有很多事情困扰我,你可以用LINQ, LINQ到SQL和ADO。净。

大O符号。LINQ使得编写O(n^4)算法变得非常容易,如果你不知道自己在做什么的话。

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

LINQ不仅仅是LINQ to SQL。

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

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

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