在LINQ2SQL查詢下面可能有人告訴我表達式樹與LINQ2SQL
1)當SQL查詢發送到SQL Server?
一個)當查詢有或分配給它的表達
B)(延遲執行),當它在foreach循環是必需的?
var query = from c in myDataContext.Customers
where c.FirstName == 'Tom'
select c;
foreach(customer cust in query)
{
//...do something
}
2)是否.NET應用程序或SQL Server轉換表達式樹成一個SQL查詢?我問這個的原因是因爲
一)所有我對錶達式樹進行讀取說,他們需要以跨線發送代碼能夠動態地而不是發送MSIL的執行。
B)如果我的表達被分配到之後懸停在查詢,我已經可以看到它已經改變了它到SQL
如果.NET應用程序會進行轉換,然後又怎能真的可以說表達式樹是通過電線發送到sql服務器的?它只是發送了SQL字符串。
回覆:1)確定了,所以我的示例不需要任何評估,因此執行被推遲到foreach調用IEnumerator .MoveNext(),但是如果我的查詢中有一個.Count,那麼查詢會立即執行。重新:2)如果這個過程如你所概述的那樣,怎麼說表達式樹是通過線傳送的?一切都在應用程序端進行評估並轉換爲SQL,然後發送到數據庫執行。 –
FuzzyFrog
@FuzzyFrog:表達式樹*不是通過線傳送的(至少對於LINQ to SQL) - 你讀到的是哪裏?請注意,「爲了通過線路發送代碼需要表達式樹」與「表達式樹通過線路發送」不同。在LINQ to SQL中,SQL *是翻譯後的代碼。 –
感謝喬恩,我認爲你的筆記已經釘在我的理解在這件事上失敗的地方。所以說公理的說,表達式樹實際上只是存儲查詢表達式的一種便捷方式,可以在需要時進行遍歷並進行評估。 L2S使用它們是因爲它具有這種延遲執行類型行爲。 – FuzzyFrog