为什么" linq to sql"与常规SQL查询不同,查询以FROM关键字开头?

时间:2015-09-19 12:52:04

标签: c# sql .net linq-to-sql

为什么linq to sql查询以FROM关键字开头,而不像常规SQL查询?

1 个答案:

答案 0 :(得分:7)

LINQ在您拥有的SQL中模仿Logical Query processing

8. SELECT
9. DISTINCT
11. TOP
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE/ROLLUP
7. HAVING
10. ORDER BY
12. OFFSET/FETCH

但实际上它的执行方式如下:

1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE/ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
12. OFFSET/FETCH

很多人都没有意识到这一点,并犯了一些简单的错误:

SELECT col AS alias_name
FROM tab
WHERE aliass_name > 10;

并问为什么它不起作用。因为他们认为订单就像他们写的那样。 LINQ在这件事上更好。

另请参阅Logical Query ProcessingBOL

  

SELECT语句的逻辑处理顺序

     

以下步骤显示逻辑处理顺序或绑定   order,用于SELECT语句。此顺序确定对象的时间   在一个步骤中定义的内容可供后续条款使用   脚步。例如,如果查询处理器可以绑定(访问)   FROM子句中定义的表或视图,这些对象及其对象   列可用于所有后续步骤。反过来,   因为SELECT子句是步骤8,任何列别名或派生   该子句中定义的列不能通过前面引用   条款。但是,它们可以通过后续条款引用,例如   ORDER BY子句。注意实际的物理执行   语句由查询处理器确定,顺序可能不同   从这个清单。

FROM

ON

JOIN

WHERE

GROUP BY

WITH CUBE or WITH ROLLUP

HAVING

SELECT

DISTINCT

ORDER BY

TOP