3

我只是查看了其中一个具有命名模式“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:

乔恩和我在他的回答评论中进行了非常热烈的讨论。我自愿创建了一篇博文,希望能澄清一些事情: 绘制 LINQ 的未知水域

编辑3:

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

4

5 回答 5

4

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

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

对于非表达式扩展被称为 LINQ-to-whatever,我当然没有任何问题——事实上,考虑到我的MoreLINQPush LINQ项目,这种立场是虚伪的。

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

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

简答:营销噱头

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

于 2009-03-10T09:20:40.590 回答
2

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

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

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

于 2009-03-10T09:40:30.200 回答
1

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

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

于 2009-03-10T11:10:20.187 回答
0

是的,大量炒作似乎是游戏的名称

“以优雅的方式构建表达式树”也是矛盾的

好的 LINQ 的好例子并不多

Linq to Sharepoint 项目总比没有好

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

于 2009-03-10T09:25:01.950 回答