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

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

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


当前回答

我最初没有意识到的是,LINQ语法不需要IEnumerable<T>或IQueryable<T>来工作,LINQ只是关于模式匹配。

可选文字 http://bartdesmet.info/images_wlw/QIsIQueryabletheRightChoiceforMe_13478/image_thumb_3.png

这就是答案(不,那篇博客不是我写的,是Bart De Smet写的,他是我发现的LINQ上最好的博主之一)。

其他回答

哪个更快,内联Linq-to-Sql还是使用Tsql spprocs的Linq-to-Sql

... 是否有使用服务器端(Sproc)或客户端(内联Linq)查询更好的情况。

我对LINQ还是个新手。以下是我第一次尝试时遇到的问题

将多个查询合并为一个查询 在Visual Studio中有效地调试LINQ查询。

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

在LINQ to SQL中,我经常看到人们不理解DataContext,它可以如何使用以及应该如何使用。太多的人看不到DataContext是什么,它是一个工作单元对象,而不是一个持久化对象。

我见过很多次,人们试图单例化一个DataContext/ session it/ etc,而不是为每个操作创建一个新的时间。

然后是在IQueryable被评估之前处理DataContext但那更多的是人们不理解IQueryable而不是DataContext。

另一个我经常混淆的概念是查询语法和表达式语法。在这一点上,我将使用最简单的方法,通常坚持使用表达式语法。很多人仍然没有意识到他们最终会生成相同的东西,查询终究被编译成表达式。

正如大多数人所说,我认为最被误解的部分是假设LINQ只是T-SQL的替代品。我的经理认为自己是一个TSQL专家,他不让我们在项目中使用LINQ,甚至讨厌微软发布这样的东西!!