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

Xai*_*oft 14 linq

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

var products = from p in Products
               select p.Name;
Run Code Online (Sandbox Code Playgroud)

什么时候他们可以做到这一点:

var products = select p.Name from Products p;
Run Code Online (Sandbox Code Playgroud)

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

peS*_*HIr 26

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

  • 最好将LINQ视为支持代码中的*查询*,而不是代码中的SQL.绝大多数SQL都不受支持,也不应该受到支持. (4认同)
  • 此外,重要的是要意识到LINQ不需要扩展方法,也不限于IEnumerable <T>.从根本上说,查询表达式只是语法糖,编译器将其转换为以正常方式解析的方法调用.查询运算符最常见的来源是System.Linq中的扩展方法,但它们不是唯一的. (3认同)

Tam*_*ege 25

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

  • 我记得第九次接受安德斯的第9次采访,他提到了这一点.LINQ也受到其他查询语言(如XQuery)的影响,而不仅仅是SQL. (6认同)
  • @Xaisoft即使不是 - 理由已经足够了. (3认同)

Jon*_*eet 19

暂且不谈IntelliSense,查询表达式扩展等(这都是有效的理由),我实际上相信LINQ方式更有意义.

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

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

  • @Jon:因为所有程序员都认为SQL是程序化的! (2认同)

dah*_*byk 5

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