使用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();
它运行但仍然懒散地加载。
有什么想法吗?
答案 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();