C# “为什么?”;“linq到sql”;与常规SQL查询不同,查询以FROM关键字开始?

C# “为什么?”;“linq到sql”;与常规SQL查询不同,查询以FROM关键字开始?,c#,sql,.net,linq-to-sql,C#,Sql,.net,Linq To Sql,为什么linq-to-sql查询以FROM关键字开始而不像常规sql查询 LINQ模拟SQL中的逻辑查询处理: 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. W

为什么linq-to-sql查询以
FROM
关键字开始而不像常规sql查询

LINQ模拟SQL中的逻辑查询处理:

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
在这件事上做得更好

另见和:

SELECT语句的逻辑处理顺序

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

FROM

ON

JOIN

WHERE

GROUP BY

WITH CUBE or WITH ROLLUP

HAVING

SELECT

DISTINCT

ORDER BY

TOP

关于您的问题的一些文档是可用的,他们说
它更类似于“foreach”
。然而,这是一个很好的起点,可以了解什么是LINQ以及LINQ的不同类型

您通常会发现以下类型的LINQ无处不在

  • LINQ(LINQ到对象)
  • DLINQ(Linq到SQL)
  • XLINQ(Linq到XML)

  • 如果您在编写SQL语句时使用某些intellisense提供程序(即:Apex SQL Complete、Redgate SQL prompt或具有最新版本SQL server的SSMS),您将看到intellisense在到达“发件人”-select*发件人之前无法向您提供建议。如果经典SQL以“from”开头,那么您也可以使用intellisense。当“intellisense”不存在时,这并不是一个问题,但随着.Net的出现,intellisense在代码编写中扮演着重要的角色。关于这一点,伊兹克·本·甘、亚当·麦卡尼奇、德扬·萨卡、凯文·法利在第一章《为什么必须按顺序进行t-SQL查询》一书中有很好的解释。