LINQ的一些“最佳实践”是什么?

5

我希望在我的下一个项目中使用Linq来减轻一些艰苦的劳动。在我深入学习Linq之前,我想听听关于最佳实践的建议。我还没有决定是否要使用EF和Linq to SQL。


我认为你可能需要先决定。我不确定有什么最佳实践适用于两者。 - John Saunders
请注意,LINQ to SQL 仅适用于 SQL Server / SQL Server Compact 数据库。 - anonymous
@Mr Roys:并非完全正确。Devart为Linq-to-Oracle提供了解决方案。http://www.devart.com/dotconnect/linq.html - Jim G.
4个回答

7

首先,你需要定义你所说的“LINQ”的含义。根据问题的其余部分,我猜测你在询问Linq to SQL。

如果你指的是Linq to SQL,并且你正在开始一个新项目,我会建议第一个最佳实践是不要这样做,而是使用.NET中的Entity Framework。它比EF 1.0以及Linq to SQL都要好得多。自从发布了Visual Studio 2010和.NET 4以来,Linq to SQL应该被避免用于所有新项目。

  • 我能给你的最大最佳实践是正确地设置数据库模型。正确规范化你的数据库。正确调整和索引你的数据库。基于这个正确创建的数据库构建EF模型,你将会很满意。如果你试图走捷径,或者你以某种非关系型对象存储的方式对数据库进行建模,你的生活将充满痛苦和折磨。

  • 确保你团队中的每个人都理解延迟执行的概念以及它与查询生成和执行的关系。

  • 了解IQueryable<>和IEnumerable<>之间的区别。这有点类似于前面的一点,但是当涉及到组合Linq查询时,了解IQueryable<>如何工作可以让你的生活变得更轻松。

  • 了解延迟加载以及它对查询性能的影响。在适当的情况下使用它,并学习如何为最佳性能策略性地急切地加载对象。

  • 了解每个查询的频率以及对负载的影响。你的一些最高频率的查询通常可以通过编译来受益,但大多数情况下你不需要这样做。


非常好而且简洁的解释,每个要点都提供一些参考资料将会非常受欢迎。 - Agamand The True

0

0

0
为了避免被惰性求值所困扰,建议阅读Jon Wagner的博客文章Best Practices for Linq Enumerables and Queryables,我在此引用如下内容:
  1. 尽量使用“流畅的C#”而不是语言扩展。
  2. 在构建完LINQ链之后立即“封闭”它们(如果它们将被重复使用)。
  3. 只有在希望实现组合时才返回“开放”的链条。
  4. 确保“开放”的链条返回的语义清晰明确。
  5. 如果返回一个开放的链条,请确保内部代码没有副作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接