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

Chi*_*hin 5 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;
Run Code Online (Sandbox Code Playgroud)

如果我们把这个select子句放在传统的第一个select- from- whereSQL中,它就无法编译:

var numQuery = select num            // error: ; expected
               from num in numbers
               where (num % 2) == 0;
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 14

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

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

我会说通过按时间顺序放置查询,它还有一个更有意义的好处:你从一个源开始,过滤它,转换它等等,最后得到一个结果.

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

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