【问题标题】:When does a library deserve the be called "Linq-something" or "something-Linq"?什么时候图书馆应该被称为“Linq-something”或“something-Linq”?
【发布时间】:2009-03-10 09:18:47
【问题描述】:

我刚刚查看了其中一个具有命名模式“something-Linq”的库,希望获得更多关于如何以优雅的方式构建表达式树的知识 - 并且感到失望。因为我能找到的只是扩展 IEnumerable 的方法——当然是使用“普通”C# 代码。

现在我有一个问题:IEnumerable 的非表达式扩展真的证明库的名称中包含“Linq”吗?还是作者只是在炒作,试图为他的 IEnumerable 扩展库获得更多下载,而当在库名称中看到“Linq”时,我期待 IQueryable 和表达式是正确的?

编辑:

我认为 Linq-to-... 和 something-Linq 库之间存在差异。恕我直言 Linq-to-... 是 linq 提供程序库,something-Linq 是 linq 扩展。我认为 Linq 提供程序库可以选择是否在其结果中公开 IQueryable 或 IEnumerable - linq 扩展没有这种选择。就我而言,他们必须能够使用这两种提供程序库。这对我来说意味着所有 linq 扩展都必须提供 Queryable 和 Enumerable 扩展。

编辑 2:

Jon 和我在他的回答中进行了非常热烈的讨论。我自愿创建了一篇博文,希望能澄清一些事情: Mapping the uncharted waters of LINQ

编辑 3:

对于任何对讨论感兴趣的人 - 我真的鼓励你去我的博客文章。跳过帖子本身,因为它太可怕了 - 直接进入 Jon 的讨论和解释。

【问题讨论】:

    标签: c# .net linq extension-methods


    【解决方案1】:

    LINQ 对我来说并不意味着表达式树。它意味着以 LINQ 的一般风格进行数据访问。 LINQ to Objects 中没有任何表达式树,但绝对是 LINQ IMO。

    LINQ to XML 有点似是而非——它实际上只是一个 XML API,它以各种方式公开IEnumerable<T>,作为输入和输出。这意味着它与 LINQ to Objects 一起工作得非常好,但它本身并没有实现任何标准运算符。但是,您通常将它与 LINQ to Objects 一起使用,结果是“类似 LINQ”的代码,所以我想这还不错。

    我当然不介意将非表达式扩展称为 LINQ-to-whatever - 事实上,考虑到我的 MoreLINQ 和 Push LINQ 项目,这样的立场确实是虚伪的。

    对我来说有两个主要问题:

    • API 是关于数据访问和处理的吗?
    • 它是否试图使访问/处理流畅,理想情况下(但不一定)符合查询表达式模式,以启用 VB9 和 C#3 的语言特性来帮助编写可读代码?

    【讨论】:

    • 我不知道 - System.Linq 中确实有 Queryable ,它严重依赖于表达式树,并且似乎是当“from s in list where ...”获取时使用的那个编译。如果没有表达式树,则相应的 IQueryProvider 无法发挥其神奇的作用来转换 that 子句。
    • 这用于 需要 使用表达式树(并且实现 IQueryable,这不是必需的)的 LINQ 提供程序。但是,如果您使用 LINQ to Objects,则会使用 Enumerable 而不是 Queryable,并使用委托而不是表达式树。
    • System.Linq 中也有 Enumerable,它不依赖于表达式树并实现相同的运算符。你应该读斯基特的书!
    • @Earwicker 我认为 Enumerable 实现(我知道;))是出于性能原因。我建议你看看 EnumerableQuery。哦,读一本书并不是结束争论的借口。 ;)
    • @Jon 我不是在谈论 Linq-to-...“提供者”库。那些确实有权选择是否公开 IQueryable 或 IEnumerable 作为其结果。但是声称扩展 Linq 恕我直言的库必须能够无缝地使用这两种提供程序库。
    【解决方案2】:

    简答:营销噱头

    人们使用术语“Linq-something”或“something-linq”作为营销噱头,让客户/开发人员了解库是什么。这样可以节省营销人员(或文档开发人员)解释库功能的时间。

    【讨论】:

      【解决方案3】:

      LINQ 对每个人都有不同的含义(当它被用来标记所有东西时必然会发生):

      • 通过在嵌入式 DSL 中表达查询来访问数据库的便捷方式。
      • 支持在运行时分析和转换代码的语言功能。
      • 使用受惰性函数式编程语言启发的技术以单子方式处理列表。
      • 以单子方式处理任何事物...同上。

      到目前为止(对我而言)最有用的是函数式编程部分,但我只是将其称为函数式编程以避免混淆。

      【讨论】:

        【解决方案4】:

        与 Linq 相关的一切都只是“普通”的 C# 代码,主要是 IEnumerable 的扩展。

        编辑:StackOverflow 似乎想隐藏我实际上在上面说的 IEnumerable。它与 Linq 不兼容!

        【讨论】:

        • 只需将术语放在反引号中:IEnumerable<T>
        【解决方案5】:

        是的,很多炒作似乎是游戏的名称

        另外,“以优雅的方式构造表达式树”是矛盾的

        好的 LINQ 的好例子并不多

        Linq to Sharepoint 项目总比没有好

        http://linqtosharepoint.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=8713

        【讨论】:

          猜你喜欢
          • 2018-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多