2016-11-07 70 views
2

我有一個查詢,看起來像這樣是什麼負載之間的差異,包括在SQL查詢

  var query = db.Customer 
      .Include(c => c.Address) 
      .Where(c => c.Address.Id > 10) 
      .ToList(); 

當我做到這一點,而不是

 var query = db.Customer 
      .Where(c => c.Address.Id > 10) 
      .ToList(); 

     db.Address 
      .Where(a => a.Id > 10) 
      .Load(); 

我得到相同的結果,據我看到。

我的問題是:這兩個查詢返回的內容是否有區別,哪一個比另一個更受歡迎?

+0

您是否嘗試過搜索重複「load vs include」?有很多,例如[這裏](http://stackoverflow.com/q/19319116/1997232)。 – Sinatr

+0

我做到了,但顯然不夠好。但是這種情況稍有不同,因爲在加載之前我在第一個查詢中使用了Address,所以我想知道這是否會導致任何問題,或者兩個方法的結果總是相同。 –

回答

0
var query = db.Customer 
       .Include(c => c.Address) 
       .Where(c => c.Address.Id > 10) 
       .ToList(); 

在上面的查詢中,它使用單個數據庫旅程帶來所有相關數據。

var query = db.Customer 
       .Where(c => c.Address.Id > 10) 
       .ToList(); 

      db.Address 
       .Where(a => a.Id > 10) 
       .Load(); 

這裏它使用2個數據庫行程來攜帶數據。

Load :

有幾種情況下,您可能希望從 加載實體數據庫置於上下文沒有立即做什麼用 這些實體。一個很好的例子就是加載本地數據中描述的數據綁定實體 。一個常見的做法是, 寫一個LINQ查詢,然後調用ToList就可以了,只能立即 丟棄創建的列表。 Load擴展方法的工作方式與ToList類似,只不過它避免了完全創建列表。

注:我們不能說哪一個是我們用渴望的加載方法時better.Most(Include)。它是好的,simple.But有時是slow.So你需要決定哪一個根據您的數據大小等使用。

+0

那麼這兩個查詢都會帶回相同的數據呢?我的代碼與此有點不同,當我查看SQL服務器分析器時,第一個查詢比第二個查詢有更多的讀取,這是我應該使用哪個查詢的一個很好的指示? 另外你說的include方法是急切的加載,加載方法是否也有一個名字? –

+0

哪一個是最快的? – Sampath

+0

請查看更新後的帖子。 – Sampath

相關問題