如何急切地将2层包装的项目加载到集合中(实体框架C#)

时间:2016-04-20 10:24:57

标签: c# entity-framework collections iqueryable

使用Entity Framework处理WPF应用程序。

我的实体类如下:

 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>); 

- &GT;懒惰地加载 - &gt; tray = null,而我确实要加载托盘!

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

- &GT;这很好用

行。现在我需要获得特定Pan的元素,这带来了我未解决的问题。 myPan.Elements是一个ICollection而不是IQueryable。 所以我不能使用.Include()方法。

我的转换尝试无效:

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

它运行但仍然懒散地加载。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

实际上你并没有被迫使用你加载的实体的导航属性,你可以使用你的第二个(和工作)解决方案和这样的附加过滤器:

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

或者如果您愿意,只需插入相同的Where

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