LINQ语法与SQL语法

时间:2009-10-13 06:20:45

标签: sql linq

为什么Andres Heilsberg设计的LINQ语法与SQL的语法不同(这为程序员学习一个全新的东西带来了开销)?

如果它使用与SQL相同的语法,那不是更好吗?

4 个答案:

答案 0 :(得分:21)

LINQ不是SQL。它意味着是一种查询语言,它尽可能独立于数据源。现在可以肯定它有一个强大的SQL偏见,但它并不意味着只是在源代码中嵌入SQL(幸运的是)。

就个人而言,我非常更喜欢LINQ的SQL语法。特别是,LINQ中的排序更合乎逻辑。只需查看查询子句的顺序,就可以看到处理查询的逻辑顺序。您从数据源开始,可能会进行一些过滤,排序等,并且通常以投影或分组结束。与SQL相比,你开始说你感兴趣的是哪些列,甚至不知道你在说什么表。

LINQ不仅在这方面更合乎逻辑,而且它允许工具更好地与您合作 - 如果Visual Studio知道您从哪个数据开始,那么当您开始编写select子句时(例如)它可以帮助您使用IntelliSense。此外,它允许使用扩展方法将LINQ查询表达式转换为“点符号”相对简单,而编译器不必了解查询实际执行的任何细节。

所以从我的观点来看:不,如果LINQ严格遵循SQL的语法,那么LINQ会更糟糕。

答案 1 :(得分:5)

首先,选择你的SQL风格 - 有几个! (T-,PL-等)。

最终,有相同点和不同点。许多LINQ更改使更多有意义 - 即在尝试过滤(FROM)/ projection(WHERE)之前选择源(SELECT),允许更好的静态分析等(包括intellisense),以及更自然的查询理解语法。这对开发人员和编译器都有帮助,所以我很高兴。

答案 2 :(得分:2)

在初始数据提供时,解析表达式更简单。

因为VS提供了代码完成,即使是部分编写的LINQ查询(功能强大的IMO)。

答案 3 :(得分:0)

原因是 C# 语言设计者使用这种方法是因为当我第一次指定数据来自哪里时,现在 Visual Studio 和 C# 编译器知道我的数据是什么样的。我可以在查询的其余部分获得 IntelliSense 帮助,因为 Visual Studio 会知道“city”(例如)是一个字符串,并且它具有诸如 startsWith 和名为 length 的属性之类的操作。实际上,在像 SQL Server 这样的关系数据库中,您在 SQL 语句顶部编写的 select 子句实际上是查询引擎必须找出的最后一条信息之一。在此之前,它必须弄清楚您在 from 子句中针对的是哪个表,即使 from 子句在 SQL 语法中出现得较晚