一般来说,linq有什么缺点。
答案 0 :(得分:5)
我仍然非常喜欢LINQ:)
编辑:写完这个简短的清单后,我记得我得到了a very similar question的答案......答案 1 :(得分:3)
LINQ最大的痛苦在于(使用数据库后端),如果不是leaky abstraction,则无法在存储库接口上使用它。
LINQ非常棒在层(尤其是DAL等),但由于不同的提供商支持不同的内容,因此您无法依赖Expression<Func<...>>
或IQueryable<T>
功能对于不同的实现也是如此。
例如,在LINQ-to-SQL和Entity Framework之间:
Single()
Skip
/ Take
/ First
没有明确的OrderBy
,则等。 ADO.NET数据服务的LINQ提供程序支持不同的组合。这使得模拟和其他抽象不安全。
但是:对于内存(LINQ到对象),或在单层/实现中......太棒了。
此处有更多想法:Pragmatic LINQ。
答案 2 :(得分:1)
与编程中的任何抽象一样,它容易受到误解:“如果我只是理解这种抽象,我不需要了解幕后发生的事情。”
事实是,如果您确实了解了幕后发生的事情,您将从抽象中获得更好的价值,因为您将了解它不再适用的地方,因此您将能够应用它在适当的地方更有信心。
所有抽象都是如此,并且在桶中应用于Linq。要了解Linq to Objects,最好的方法是学习如何在C#中使用Select
编写Where
,Aggregate
,yield return
等。然后弄清楚yield return
如何通过用类编写来替换大量手写代码。然后你就可以使用它来欣赏它为你节省的努力,它将不再像魔术一样,所以你会理解它们的局限性。
Linq的变体也是如此,其中谓词被捕获为表达式并被传输到另一个要执行的环境。你必须了解它是如何工作的才能安全地使用它。
因此Linq的第一个缺点是:简单的例子看起来很简单。问题是,样本的作者如何知道要写什么?因为他们知道如何以长篇形式写出来,并且他们知道Linq的部分可以用作缩写,因此他们得到了很好的短版本。
正如我所说,Linq并不是特别具体,但无论如何都与它高度相关。
答案 3 :(得分:1)
匿名类型。正确的ORM应总是返回“你的”类型的对象(部分类,可能添加我的方法,覆盖等)。有一些教程和使用linq的不同复杂查询的示例,但它们不关心解释返回“一袋属性”的优势(返回新的{.........})。我怎么应该使用匿名类型,再次将它包装在另一个类中?
答案 4 :(得分:0)
实际上我无法想到任何缺点。它使编程生活变得更加简单,因为很多东西可以用更紧凑但更易读的方式编写。
但话虽如此,我也必须同意Jon的观点,你应该知道你在做什么(但这适用于所有技术进步)。
答案 5 :(得分:0)
它唯一的缺点是它的性能见article