LINQ设计师为什么不坚持使用今天编写sql的方式?

时间:2009-10-02 12:00:01

标签: linq

例如,为什么要在LINQ中执行此操作

var products = from p in Products
               select p.Name;

他们可以做到这一点:

var products = select p.Name from Products p;

第二个是否在linq中提供了一些限制? 也许上面的例子太简单了,实际上看不出为什么linq是按一个顺序编写而sql是用另一个命令编写的。

8 个答案:

答案 0 :(得分:26)

因为LINQ不是SQL。 LINQ由IEnumerable<T>上的许多链式扩展方法组成(当您使用System.Linq命名空间时)。 SQL like语法只是一种编译器技巧,可以在这些查询方法的链上启用一些语法糖,因此看起来你可以使用类似.NET语言中的SQL的查询。 LINQ基本上与SQL本身无关......

答案 1 :(得分:25)

因为为了使Visual Studio中的Intellisense与LINQ一起工作,它需要首先知道这些表,以便编辑器可以为程序员提供可供选择的列列表。如果以SQL方式执行,首先选择列,编辑器无法真正帮助您,因为它不知道要查看哪些表。

答案 2 :(得分:19)

除了IntelliSense,查询表达式扩展等(这些都是正当理由),我实际上相信LINQ方式更有意义。

使用数据源启动。您应用过滤器,订购等。您完成投影。换句话说,查询是按逻辑操作顺序编写的。

换句话说:为什么SQL设计师选择以这种方式订购SQL查询呢?

答案 3 :(得分:5)

Intellisense通常被认为是一个原因,但我认为更好的解释是Select逻辑发生在查询编写过程的最后。首先设置数据源,然后进行过滤和分组,然后在完成所有操作后,指定要删除的内容。

答案 4 :(得分:4)

经常被引用的原因是Intellisense。因为如果你开始写作

select p.

编译器无法说明向您展示哪些属性。

但如果你从

开始
from person p select p.

它知道在人物对象上查找属性。

HTH 亚历

答案 5 :(得分:4)

实际上,LINQ的语法更基于XQuery,而不是基于SQL,而XQuery也是这样做的。

主要原因已经给出:在C#,VB.NET和大多数编程语言中,范围从上到下,从左到右,就像我们通常阅读的那样。编写SQL的方式,范围跳转:标识符在查询的SELECT部分中已经使用,但它仅在稍后的FROM部分中引入查询。这就是为什么XQuery的设计师决定翻转它而LINQ紧随其后的原因。

它还更好地匹配心理模型:你有数据源列表(FROM),然后你过滤掉你感兴趣的数据(WHERE),然后你对这些数据进行排序( ORDERBY)最后,您可以将其投影到不同的表示形式(SELECT)或对结果进行分区(GROUP BY)。之后,您可以将结果注入下一个查询(INTO)。

答案 6 :(得分:3)

扩展peSHIr所说的内容。

LINQ基于lambda演算的数学原理。

You need to study/understand how LINQ query operators map to actual methods

答案 7 :(得分:1)

虽然其他人已经正确地声明提供intellisense是影响Ander决策的部分原因,但需要考虑的其他事情是LINQ不仅仅是用于SQL。由于它是一种更具包容性的技术,因此LINQ从未打算仅限于以SQL的方式工作。