2008-11-07 84 views
26
  • LINQ(语言集成查询)的优缺点是什么?
  • 什么是使用LINQ的最好和最坏的情况?
  • 您对使用LINQ有什么好处或没有受益?
  • 哪些数据源最有利于LINQ?
+0

看起来像一个社区维基问题的好候选 – 2008-11-07 06:42:33

回答

32

我是LINQ的粉丝,尽管它需要保持透视,而不是被视为银弹。

优点:

  • 声明的方式让查询更容易理解和更紧凑
  • 可扩展性和表达式树允许多个来源
  • 即使在处理查询可以通过其他方式来实现大部分一致查询比LINQ的对象 - 例如并行LINQ和我自己的推式LINQ框架。非常灵活。
  • 惊人有用的进程查询,它是最容易理解
  • 大,以便能够避免串等,可以很容易地对LINQ添加
  • 默认提供运营商,以及其他范围广SQL到对象主要为LINQ引入
  • 语言特征广泛适用别处(耶为lambda表达式)

缺点:

  • 查询表达式理解不够好,并且被过度使用。通常简单的方法调用更简单。供应商之间的
  • 不可避免的矛盾 - 阻抗不匹配仍然存在,这是合理的,但需要理解
  • 总会有一些东西,你可以在SQL做,但不是在LINQ
  • 不理解这是怎么回事,它的容易编写非常低效的代码
  • 很难编写LINQ提供程序。这可能是不可避免的,但微软的更多指导将不胜感激。
  • 这是想对于大多数开发人员的数据访问的新方法,并且需要时间理解渗透
  • 未进行具体LINQ,但与它有关 - 在C#中被发现扩展方法的方法是粒度不够
  • 某些运营商“缺少”,特别是OrderBy等同于排序的其他内容 - 例如寻找项目与
  • 延迟执行和流知之甚少的属性的最大值(但改善)
  • 调试可能是由于延迟执行非常棘手和流
  • 在某些特定情况下,LINQ可以显著比手动代码慢。你理解内部运作越好,你就能更好地预测这一点。(当然,如果性能对你很重要,你应该围绕它进行适当的测试。)

我觉得在处理进程内查询时最好。他们很容易预测,理解和扩展。诸如LINQ to XML和并行LINQ等互补技术非常棒。几乎可以在任何地方使用LINQ to Objects。

LINQ to SQL等非常适合他们,但他们很难理解,需要更多的专业知识。它们也仅适用于您的代码的某些区域。

+0

dams很多缺点,但我仍然喜欢它 – 2008-11-07 07:09:15

+12

他们应该重命名该网站Skeetoverflow国际海事组织。 – cfeduke 2008-11-07 07:20:00

+2

@Nathan:是的,名单是令人畏惧的 - 但专业人士更重要:)我一直想念LINQ所有的时间,我用Java编写:( – 2008-11-07 07:30:26

3

我最喜欢的部分:用它们来简化编写单元测试。 IEnumerable链也促使我在代码中编写更流畅的接口。

缺点:兰姆达斯和延伸方法是我的锤子,所有问题都是钉子。

总体而言:为我编程时在C#编程中注入了新的活力。

1

他们通过延迟执行的方式从try catch块中偷取异常存在问题。

例如:

var l = new List<int>() {1, 2, 3}; 
try 
{ 
    l.Select(x => x/0); 
} 
catch 
{ 
    // error 
} 

l.elementAt(0); // exception occurs here outside of the try catch 

这可能会非常棘手你第一次碰到这个问题,尤其是在调试器将指向你在try-catch中的代码。

否则我觉得它们非常有用,非常省时。

1

我已经使用LINQ主要处理对象的集合。 LINQ在对象集合中运行良好,在大多数情况下消除了谓词函数的需要。

我曾尝试过使用LINQ to SQL,但发现它动力不足,笨拙。特别是我无法让自己使用SQL数据库类设计器。也许它确实给数据库带来了intellisense,但是当你拥有SQL时,谁需要它?

但是让我告诉你,了解更多关于LINQ的知识当然是一个好主意,因为未来的应用程序应该只会增加。

0

临:

缺点:

  • 任何新技术一样有太多人不理解,但仍然使用它

@乔恩飞碟双向 - 另一个很大的反响,你偷大家的风头:P。我完全同意写一个提供者有多困难,现在我正在处理它!你熟悉Bart De Smet吗?他有很多很好的例子。