从数据库检索数据时排除子表数据

时间:2018-08-29 09:26:09

标签: c# entity-framework linq

我正在使用实体框架代码优先方法,下面是我在某些条件下从中检索数据的表。

public class Case
{
    public int CaseId { get; set; }
    public string Name { get; set; }
    public DateTime StartDateTime { get; set; }
    public DateTime? EndDateTime { get; set; }
    public virtual ICollection<CaseUser> CaseUsers { get; set; }
    public virtual ICollection<Sector> Sectors { get; set; }
    public virtual ICollection<CasePoaSerie> CasePoaSeries { get; set; }
    public virtual ICollection<Pod> Pods { get; set; }
    public virtual ICollection<Poa> Poas { get; set; }

    public Case()
    {
        CaseUsers = new Collection<CaseUser>();
        Sectors = new Collection<Sector>();
        CasePoaSeries = new Collection<CasePoaSerie>();
        Pods = new Collection<Pod>();
        Poas = new Collection<Poa>();
    }
}

存储库功能:

public List<Case> GetActiveCasesForUser(int userId)
    {
        var queryable = DbSet.Include(x => x.CaseUsers);
        queryable = queryable.Where(x => x.CaseUsers.Any(o => o.UserId == userId));
        queryable = queryable.Where(m => m.StartDateTime <= DateTime.Now && (m.EndDateTime == null || m.EndDateTime <= DateTime.Now));

        return queryable.ToList();
    }

问题:

在结果集中,我只需要有关case表和caseusers表的数据,但是结果包含所有相关表的数据,包括不需要的扇区,casepoaseries,pod,poa。

有人可以帮助我,以便我的结果集中只有主表内容和caseusers表的内容,其余表的计数应该为0。

1 个答案:

答案 0 :(得分:0)

实体框架中的延迟加载

延迟加载会延迟相关数据的加载,直到您明确要求为止。这与渴望加载相反。

延迟加载规则:

  1. context.Configuration.ProxyCreationEnabled应该为true。
  2. context.Configuration.LazyLoadingEnabled应该为true。
  3. 导航属性应定义为公共的,虚拟的。语境 如果该属性未定义为虚拟,则不会进行延迟加载。

在实体框架中快速加载

热切加载是一种过程,在该过程中,对一种类型的实体的查询也将相关实体作为查询的一部分进行加载,因此我们无需对相关实体执行单独的查询。使用Include()方法可以实现更早的加载。