C# 在实体框架中加载具有筛选条件的子对象记录

C# 在实体框架中加载具有筛选条件的子对象记录,c#,c#-4.0,entity-framework-4.1,entity-framework-5,C#,C# 4.0,Entity Framework 4.1,Entity Framework 5,采用实体框架设计了数据访问层,给出了PackageInstance对象的示例POCO结构 public class PackageInstance { public virtual long PackageInstanceId {set;get;} public virtual boolean IsDeleted {set;get;} public virtual List<Session> Sessions {set;get;} } public class Sess

采用实体框架设计了数据访问层,给出了PackageInstance对象的示例POCO结构

public class PackageInstance
{
  public virtual long PackageInstanceId {set;get;}
  public virtual boolean IsDeleted {set;get;}
  public virtual List<Session> Sessions {set;get;}
}

public class Session
{
  public virtual long SessionId {set;get;}
  public virtual long PackageInstanceId {set;get;}
  public virtual boolean IsDeleted {set;get;}
  public virtual List<Note> Notes {set;get;}
}

public class Note
{
  public virtual long NoteId {set;get;}
  public virtual long SessionId {set;get;}
  public virtual boolean IsDeleted {set;get;}
  public virtual List<Documents> Document {set;get;}
}

如何消除多个DB调用?

免责声明:我是项目的所有者

EF+查询IncludeFilter功能允许筛选相关实体。它支持EF5

var packageInstanceDB = entity.PackageInstances
    .IncludeFilter(x => x.Sessions)
    .IncludeFilter(x => x.Sessions.Select(y => y.Notes.Where(sn => !sn.IsDeleted)))
    .IncludeFilter(x => x.Sessions.SelectMany(y => y.Notes.Where(sn => !sn.IsDeleted)).Select(z => z.Documents.Where(sn => !sn.IsDeleted)))
    .First(p => p.PackageInstanceId == purhcaseSessionId);
注意:必须包括每个路径


维基:

你的代码被遵守了吗?错了。用实际代码快照更新了问题。这里也发生了多个DB呼叫。你能给我们举个例子并解释一下你想要得到什么吗?首先要感谢Jonathan Magnan。。。在4个月之前,我用EFP替换了现有代码,它提供了更好的性能。。。。。
var packageInstanceDB = entity.PackageInstances
    .IncludeFilter(x => x.Sessions)
    .IncludeFilter(x => x.Sessions.Select(y => y.Notes.Where(sn => !sn.IsDeleted)))
    .IncludeFilter(x => x.Sessions.SelectMany(y => y.Notes.Where(sn => !sn.IsDeleted)).Select(z => z.Documents.Where(sn => !sn.IsDeleted)))
    .First(p => p.PackageInstanceId == purhcaseSessionId);