为什么不能选择LINQ查询中的第一个?

时间:2015-03-13 20:24:33

标签: c# linq

在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;

这种限制背后的原因是什么?

3 个答案:

答案 0 :(得分:14)

  

这种限制背后的原因是什么?

我认为主要原因实际上是智能感知。在IDE知道您正在使用哪种类型的集合之前,它无法从该集合的元素中建议您要使用哪些属性。现在语法的工作方式是,当您编写selectwhere子句时,IDE可以告诉元素类型是什么并提出建议。

我认为通过按时间顺序排列查询还有更多的意义:开始使用源代码,过滤它,转换它等等结果。

最后,我怀疑它会使语言从查询表达式转换为" normal" C#(通常使用扩展方法)更易于表达。

我认为为什么SQL向后表达会更合理:)

答案 1 :(得分:2)

我认为这是因为这实际上更有意义。在你说出什么之前,你首先需要告诉它从何处获取。我实际上从未理解SQL中的逻辑。

它还有助于IntelliSense在您查询的对象上显示相应的字段和属性。

答案 2 :(得分:-1)

由于循环,我认为有理由首先使用“ from”。 对于循环语法,首先获取变量,然后根据索引或项目进行操作或处理。