linq的缺点

时间:2009-05-02 09:10:21

标签: linq

一般来说,linq有什么缺点。

6 个答案:

答案 0 :(得分:5)

  • 第一次开始时很难理解
  • 延迟执行可以将错误与其原因(就时间而言)分开
  • 进程外LINQ(例如LINQ to SQL)总是有点漏洞 - 你需要知道哪些有效,哪些无效,基本上

我仍然非常喜欢LINQ:)

编辑:写完这个简短的清单后,我记得我得到了a very similar question的答案......

答案 1 :(得分:3)

LINQ最大的痛苦在于(使用数据库后端),如果不是leaky abstraction,则无法在存储库接口上使用它。

LINQ非常棒层(尤其是DAL等),但由于不同的提供商支持不同的内容,因此您无法依赖Expression<Func<...>>IQueryable<T>功能对于不同的实现也是如此。

例如,在LINQ-to-SQL和Entity Framework之间:

  • EF不支持Single()
  • 如果Skip / Take / First没有明确的OrderBy ,则
  • EF会出错
  • EF不支持UDF

等。 ADO.NET数据服务的LINQ提供程序支持不同的组合。这使得模拟和其他抽象不安全。

但是:对于内存(LINQ到对象),或在单层/实现中......太棒了。

此处有更多想法:Pragmatic LINQ

答案 2 :(得分:1)

与编程中的任何抽象一样,它容易受到误解:“如果我只是理解这种抽象,我不需要了解幕后发生的事情。”

事实是,如果您确实了解了幕后发生的事情,您将从抽象中获得更好的价值,因为您将了解它不再适用的地方,因此您将能够应用它在适当的地方更有信心。

所有抽象都是如此,并且在桶中应用于Linq。要了解Linq to Objects,最好的方法是学习如何在C#中使用Select编写WhereAggregateyield return等。然后弄清楚yield return如何通过用类编写来替换大量手写代码。然后你就可以使用它来欣赏它为你节省的努力,它将不再像魔术一样,所以你会理解它们的局限性。

Linq的变体也是如此,其中谓词被捕获为表达式并被传输到另一个要执行的环境。你必须了解它是如何工作的才能安全地使用它。

因此Linq的第一个缺点是:简单的例子看起来很简单。问题是,样本的作者如何知道要写什么?因为他们知道如何以长篇形式写出来,并且他们知道Linq的部分可以用作缩写,因此他们得到了很好的短版本。

正如我所说,Linq并不是特别具体,但无论如何都与它高度相关。

答案 3 :(得分:1)

匿名类型。正确的ORM应总是返回“你的”类型的对象(部分类,可能添加我的方法,覆盖等)。有一些教程和使用linq的不同复杂查询的示例,但它们不关心解释返回“一袋属性”的优势(返回新的{.........})。我怎么应该使用匿名类型,再次将它包装在另一个类中?

答案 4 :(得分:0)

实际上我无法想到任何缺点。它使编程生活变得更加简单,因为很多东西可以用更紧凑但更易读的方式编写。

但话虽如此,我也必须同意Jon的观点,你应该知道你在做什么(但这适用于所有技术进步)。

答案 5 :(得分:0)

它唯一的缺点是它的性能见article