2016-04-20 23 views
0

使用實體框架一個WPF應用程序工作。如何熱切負載2層包裹的物品進入收集(實體框架C#)

我的實體類是如下:

public partial class Pan 
    { 
... 
public virtual ICollection<Element> Elements{ get; set; } 
... 
    } 


    public partial class Element 
    { 
... 
public Pan Pan { get; set; } 
public Tray Tray { get; set; } 
... 
    } 

public class Tray 
    { 
... 
public virtual ICollection<Element> Elements{ get; set; } 
... 
    } 

我不管理加載與非空托盤的元素列表。

new Context().Elements.Where(i => <my_filter>); 

- >加載lazily - > tray = null,而我希望托盤被加載!

new Context().Elements.Where(i => <my_filter>).Include(i => i.Tray).ToList(); 

- >這工作得很好

確定。現在我需要得到一個特定的泛的元素,這帶來了我未解決的問題。 myPan.Elements是一個ICollection,而不是IQueryable。 所以我不能使用.Include()方法。

我轉換的嘗試沒有成功:

myPan.Elements.AsQueryable<Element>().Where(i => <my_filter>).Include(i => i.Tray).ToList(); 

它運行,但仍然加載懶洋洋地。

有什麼想法?

+0

'myPan'是一個變量嗎?它來自哪裏? –

+0

myPan是泛 –

+0

的一個實例。顯然。問題是*它來自哪裏*,即如何得到它,是否附加到某些上下文中的代理類實例等。 –

回答

1

其實你並不一定要使用你的加載實體的導航性的判定,你可以利用你與這樣的附加過濾器第二(和工作)解決方案:

​​

,或者如果你願意,只需插入Where這是一樣的:

new Context().Elements.Where(i => i.Pan.Id == myPan.Id).Where(i => <my_filter>).Include(i => i.Tray).ToList(); 
+0

它工作正常,謝謝。 :) 這實際上是我發佈後發現的解決方案。我很好奇,如果有一個更優雅的解決方案管道Linq命令。 –