人们在第一次使用LINQ时遇到的根本误解是什么?
例如,他们认为当它真的是别的时候它是一回事吗?
并且,是否有一些最佳实践来避免这些错误?
答案 0 :(得分:90)
它应该用于所有事情。
答案 1 :(得分:26)
答案 2 :(得分:22)
它只引用LINQ to SQL
答案 3 :(得分:16)
人们在使用LINQ时犯的最大错误与人们尝试使用任何一种技术相同,而这些技术都是基于他们没有任何良好基础的技术。
如果你无法理解正确/高效的数据库查询,你将搞砸LINQ。
如果你无法理解ADO.NET和数据访问的基本原理,你可能会搞砸了。
人们认为通过使用LINQ,它将允许它们沿用,但它不会。
答案 4 :(得分:6)
我在LINQ to SQL中看到的一个基本问题是不理解 DataContext 。它是一个工作单元对象,应该为每个工作单元重新创建。
答案 5 :(得分:5)
想到的事情是
答案 6 :(得分:3)
可能人们可能会误解的一个问题是编写LINQ查询的方式,尤其是LINQ2SQL,对性能没有影响。一个人应该总是知道在后台发生了什么,如果有人打算编写具有高性能的代码,否则你可能最终会遇到有趣的超时,OOMexceptions,堆栈溢出等...... =)
答案 7 :(得分:3)
答案 8 :(得分:2)
LINQ作为一种语言非常简单,并不是那么出乎意料,特别是如果你熟悉函数式编程。
Deferred Execution的概念可能是最大的问题,也是最好的功能之一。当您使用返回IQueryable的LINQ时,重要的是要记住您不执行您刚编写的任何代码。直到你调用其中一个产生查询的其他结果的方法。
此外,就LINQ to SQL提供程序而言,我发现的最大问题是performance cost。事实证明,除非您预先编译高度流量的查询,否则构建每次运行LINQ查询时产生的SQL查询都会产生大量的CPU成本。
答案 9 :(得分:2)
我完全同意亚当·罗宾逊的说法,事实上,在影响或建筑观点方面,人们对美容语法不再深入研究技术事实。
有时候人们会认为它是一件事,当它真的是另一回事时......重要的是要注意Linq是一种“技术”并且可以通过多种方式实现,每种方式都可能以不同的方式影响性能和设计(例如),基本语法保持不变,但基础内容可能会发生变化。
实际上,从伟大且不断增长的实施开始,没有完整的最佳实践列表,最佳实践可以从以下开始:
答案 10 :(得分:2)
对自己说,了解序列何时被缓冲或流式传输非常重要。
使用大量数据填充缓冲区会占用大量内存。如果可能,一旦数据减少,应该进行反转,计数,排序等操作。在连接中,左侧序列是流式传输的,右侧是缓冲的。如果尺寸存在显着差异,请将较小的尺寸放在右侧。
答案 11 :(得分:1)
在没有主键的表上使用linq2sql(而不是在设计器中定义一个)。
特别是如果他们正在做的是更新,它不会更新任何内容,也不会出现错误。
答案 12 :(得分:1)
很多人认为LINQ是他们可以在Code中使用的'Magical SQL'。它看起来像SQL,但它完全不同。了解它的差异以及真正做的事情将会阻止很多挫折。
答案 13 :(得分:0)
我认为理解查询执行的重点往往是一个错误(即认为它是在查询点,而不是在数据被首次访问的那一点),以及只是因为它编译它正在进行的信念跑。
这是对Linq to SQL的引用。
Joe Albahari为Linq提供了一个很棒的工具LinqPad,让我能够更快地学习Linq。如果你没有它,那就去吧!我甚至没有收取佣金;)
答案 14 :(得分:0)
了解从Linq2SQL / Entities到Linq2Objects的位置。了解数据库引擎与应用程序中的内容和未执行内容。知道何时使用内存中对象与您正在使用的基础Linq提供程序,然后知道如何在需要执行查询后处理时有意地从Linq2SQL转换到Linq2Object,从而利用您不支持的C#/ .NET函数提供商。