2014-03-14 29 views
0

當我們將結果映射到一個對象時,LINQ會使用否定執行嗎?當我們將結果映射到對象時,LINQ to SQL是否會使用防禦執行?

var x = from rcrd in DBContext.FooTable 
     select new Model.BOFoo() 
     { Bar = rcrd.Bar }; 

上述代碼映射rcrd爲Model.BOFoo對象。這個映射是否會導致LINQ從數據庫中獲取實際數據?還是等到我調用x.ToList()?

+0

非常好的問題,這將解決的幾個疑惑:強制) –

回答

1

我會回答是的。如果我不想錯過任何有關這方面的信息,即使我們將結果映射到對象,LINQ仍然會使用延遲執行。對象初始化也將被延遲。

1

除非您的Linq查詢包含執行查詢的方法,否則不會執行並將被延期。該執行查詢的方法

實例包括首先(),FirstOrDefault(),ToList(),ToArray的等。

選擇是沒有這樣的方法,即使不選擇新的。

0

我總是覺得有用想代碼,因爲它是在一個方法鏈:

DBContext.FooTable 
    .Select(rcrd=>new Model.BOFoo{Bar=rcrd.Bar}); 

這是更容易顯現延遲執行,你只傳遞一個函數到Select那將根據需要進行評估。 new只是該功能的一部分。

所以,har07和Erik已經提到,如果是延期執行方法,那麼它會保持下去,除非通過其他方法如ToList

相關問題