在LINQ查询中,运算符的顺序为from
- where
- select
:
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
var numQuery = from num in numbers
where (num % 2) == 0
select num;
如果我们首先将select
子句放在传统的select
- from
- where
SQL中,则无法编译:
var numQuery = select num // error: ; expected
from num in numbers
where (num % 2) == 0;
这种限制背后的原因是什么?
答案 0 :(得分:14)
这种限制背后的原因是什么?
我认为主要原因实际上是智能感知。在IDE知道您正在使用哪种类型的集合之前,它无法从该集合的元素中建议您要使用哪些属性。现在语法的工作方式是,当您编写select
或where
子句时,IDE可以告诉元素类型是什么并提出建议。
我认为通过按时间顺序排列查询还有更多的意义:开始使用源代码,过滤它,转换它等等结果。
最后,我怀疑它会使语言从查询表达式转换为" normal" C#(通常使用扩展方法)更易于表达。
我认为为什么SQL向后表达会更合理:)
答案 1 :(得分:2)
我认为这是因为这实际上更有意义。在你说出什么之前,你首先需要告诉它从何处获取。我实际上从未理解SQL中的逻辑。
它还有助于IntelliSense在您查询的对象上显示相应的字段和属性。
答案 2 :(得分:-1)
由于循环,我认为有理由首先使用“ from”。 对于循环语法,首先获取变量,然后根据索引或项目进行操作或处理。