我希望我的查詢結果只包含一些重複數據。對於instatnce說我有實體銷售,並與各單位有一個項目屬性這是一個具體的銷售項目的列表項:實體框架4.0只包含一些相關數據
from s in myContext.Sales
select s;
返回包含所有項目(當我瀏覽到項目的每個銷售的所有銷售因爲LazyLoading默認爲開啓)。但我想只包括每個銷售特定的項目 - 說名稱==「橙」的項目,我仍然希望所有的銷售。我怎樣才能做到這一點?
我希望我的查詢結果只包含一些重複數據。對於instatnce說我有實體銷售,並與各單位有一個項目屬性這是一個具體的銷售項目的列表項:實體框架4.0只包含一些相關數據
from s in myContext.Sales
select s;
返回包含所有項目(當我瀏覽到項目的每個銷售的所有銷售因爲LazyLoading默認爲開啓)。但我想只包括每個銷售特定的項目 - 說名稱==「橙」的項目,我仍然希望所有的銷售。我怎樣才能做到這一點?
我的回答是特定於EF 4.0,大多從這裏得到:http://msdn.microsoft.com/en-us/library/bb896249.aspx
防止惰性加載加載的一切,當一個導航屬性進行訪問:
myContext.Configuration.LazyLoadingEnabled = false;
加載你的項目:
List<Sale> sales = (from s in myContext.Sales
select s).ToList()
的foreach項目附上其相關項目你想(的關鍵,只得到一些物品是CreateSourceQuery()方法):
foreach(Sale s in sales)
s.Items.Attach(s.Items.CreateSourceQuery().Where(i => i.Name == "Orange"));
如果延遲加載開啓,它實際上會延遲加載您引用的內容。如果您不想啓用它,請將其關閉。
myContext.Configuration.LazyLoadingEnabled = false;
您可以指定您希望在初始數據庫往返中加載某些內容,以便不需要延遲加載。那裏,包括是你的朋友。
using System.Data.Entity; // You need this to get the lambda version of Include
from s in myContext.Sales.Include(s => s.PropertyA).Include(s => s.PropertyB)
select s;
注意,您可以隨時通過不聲明它們的虛擬禁用延遲加載具體性能。
我建議以下博客爲一個偉大的概述
你不會有LINQ限制銷售退回?我希望所有的銷售只是每個銷售與特定項目..是myContext.Sales – markmnl 2012-08-09 04:15:54
即使包括使用System.Data.Entity;我得到:「不能將lambda表達式轉換爲類型'字符串',因爲它不是委託類型」 – markmnl 2012-08-09 04:16:52
如果您還沒有,還必須引用System.Data.Entity。是的,給定的Linq語句將限制返回給Sales對象本身的Sales部分以及包含一個或多個.Include調用的任何內容。如果你不想*延遲加載,你*必須先指定你想要的。 – 2012-08-09 04:24:53