2012-08-09 70 views
0

我希望我的查詢結果只包含一些重複數據。對於instatnce說我有實體銷售,並與各單位有一個項目屬性這是一個具體的銷售項目的列表項:實體框架4.0只包含一些相關數據

from s in myContext.Sales 
select s; 

返回包含所有項目(當我瀏覽到項目的每個銷售的所有銷售因爲LazyLoading默認爲開啓)。但我想只包括每個銷售特定的項目 - 說名稱==「橙」的項目,我仍然希望所有的銷售。我怎樣才能做到這一點?

回答

0

我的回答是特定於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")); 
4

如果延遲加載開啓,它實際上會延遲加載您引用的內容。如果您不想啓用它,請將其關閉。

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; 

注意,您可以隨時通過不聲明它們的虛擬禁用延遲加載具體性能。

我建議以下博客爲一個偉大的概述

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

你不會有LINQ限制銷售退回?我希望所有的銷售只是每個銷售與特定項目..是​​myContext.Sales – markmnl 2012-08-09 04:15:54

+0

即使包括使用System.Data.Entity;我得到:「不能將lambda表達式轉換爲類型'字符串',因爲它不是委託類型」 – markmnl 2012-08-09 04:16:52

+0

如果您還沒有,還必須引用System.Data.Entity。是的,給定的Linq語句將限制返回給Sales對象本身的Sales部分以及包含一個或多個.Include調用的任何內容。如果你不想*延遲加載,你*必須先指定你想要的。 – 2012-08-09 04:24:53