【问题标题】:drawbacks of linqlinq的缺点
【发布时间】:2010-04-21 17:05:50
【问题描述】:

linq 一般有什么缺点。

【问题讨论】:

    标签: linq


    【解决方案1】:
    • 刚开始使用它时可能很难理解
    • 延迟执行可以将错误与其原因分开(就时间而言)
    • 进程外 LINQ(例如 LINQ to SQL)总是有一定漏洞的抽象 - 本质上,您需要知道哪些有效,哪些无效

    我仍然非常喜欢 LINQ :)

    编辑:写完这份短名单后,我记得我已经得到了a very similar question的答案...

    【讨论】:

      【解决方案2】:

      LINQ 最大的痛点是(使用数据库后端)如果没有 leaky abstraction,您将无法在存储库接口上使用它。

      LINQ 非常棒一个层(尤其是 DAL 等),但由于不同的提供者支持不同的东西,你不能依赖 Expression<Func<...>>IQueryable<T> 功能对不同的工作相同实现。

      例如,在 LINQ-to-SQL 和实体框架之间:

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

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

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

      这里有更多想法:Pragmatic LINQ

      【讨论】:

        【解决方案3】:

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

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

        这适用于所有抽象,并且适用于大桶中的 Linq。要了解Linq to Objects,最好的办法是学习如何用yield return在C#中编写SelectWhereAggregate等。然后弄清楚yield return 是如何通过全部用类编写来替换大量手写代码的。然后,您将能够在欣赏它为您节省的精力的情况下使用它,并且它不再看起来像魔术,因此您将了解其局限性。

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

        所以 Linq 的第 1 个缺点是:简单的例子看起来很短很简单。问题是,样本的作者怎么知道要写什么?因为他们知道如何将其全部写成长格式,并且他们知道如何将 Linq 的片段用作缩写,所以他们得出了漂亮的短版本。

        正如我所说,并不是真正特定于 Linq,但无论如何都与它高度相关。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            其实我想不出有什么缺点。它使编程生活变得更加简单,因为很多东西可以用更紧凑但可读性更好的方式编写。

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

              • 那就没有缺点了!那篇文章中测量的开销对绝大多数实际应用程序没有影响。
              • 我现在正在使用 linq 开发应用程序,性能问题真的困扰着我,特别是当你应该使用动态查询之类的东西时!
              猜你喜欢
              • 1970-01-01
              • 2012-05-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-18
              • 1970-01-01
              • 1970-01-01
              • 2010-09-08
              相关资源
              最近更新 更多