2013-11-28 65 views
1

我正在調查使用EntityFramework版本5的應用程序的網絡性能低下。我嘗試的一個選項是僅檢索Id字段,而不是整個對象。但是,在Wireshark中檢查,我發現無論如何都會傳輸所有對象。換句話說,以下兩個代碼塊會導致完全相同的網絡活動。有誰知道我可以如何導致數據庫僅在第一個查詢中返回Ids?爲什麼EntityFramework只返回一列時才返回整個對象?

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User) 
      .ToList() 
      .Select(u => u.Id) 
      .ToList(); 

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User) 
      .ToList(); 
+4

'.ToList()'物化的對象。基本上,執行查詢。之後的任何事情都是LINQ to Objects。 – James

回答

4

.ToList()實現對象。基本上,執行查詢。之後的任何事情都是LINQ to Objects。

嘗試這樣:

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User.Id).ToList(); 
2
List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User.Id).ToList(); 
+0

我在你的問題上正確糾正了我的查詢(我的問題已經修復),我發現了一個小錯誤。 +1 – James

+0

@James +1右後衛:) – Aducci

+0

這正是我錯過的。 – Manish

相關問題