例如,为什么要在LINQ中执行此操作
var products = from p in Products
select p.Name;
他们可以做到这一点:
var products = select p.Name from Products p;
第二个是否在linq中提供了一些限制? 也许上面的例子太简单了,实际上看不出为什么linq是按一个顺序编写而sql是用另一个命令编写的。
答案 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的方式工作。