我們知道 LINQ to SQL 查詢不會在您的 C# 程式中執行。相反,它被翻譯成 SQL,通過網路發送,并在資料庫服務器上執行。假設我們有以下 LINQ 查詢
var query = from c in db.Customers
where c.City == "Nantes"
select new { c.City, c.CompanyName };
它首先被翻譯成以下 SQL 陳述句,然后在資料庫服務器上執行:
SELECT [t0].[City], [t0].[CompanyName]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[City] = @p0
我的問題是,為什么不讓編譯器直接將 LINQ Query 編譯成 SQL,為什么要先將 LINQ 查詢轉換成一個 Expression 樹,然后將這個 Expression 樹“編譯”成 SQL,這樣又多了一層?
我知道還有其他資料庫技術,比如沒有sql等,所以我們不能讓C#編譯器來處理每一種不同的技術,所以這是否意味著它是像Microsoft.EntityFrameworkCore.SqlServer這樣的資料庫提供者會分析運算式樹并把它變成SQL,這意味著它是處理Expression Tree的資料庫提供者?
uj5u.com熱心網友回復:
那是正確的。運算式樹是一種 AST(抽象語法樹),需要由“提供者”處理,例如 SQL Server 或 PostgreSQL 或 NoSQL,甚至 XML。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347542.html
