深度嵌套的子实体的EF核心过滤字段

时间:2018-12-07 17:39:42

标签: c# computer-science ef-core-2.1

我正在使用EF Core 2.1查询我的数据存储。我有一个特定的查询,该查询具有相当深的子对象嵌套。大多数对象只有几个字段,但是,嵌套底部附近是对用户表的引用。

dbContext.Set<A>()
  .Include(x => x.B)
  .Include(b => b.C)
    .ThenInclude(c => c.D)
    .ThenInclude(d => d.E)
    .ThenInclude(e => e.F)
    .ThenInclude(f => f.G)
    .ThenInclude(g => g.User)
    .SingleOrDefaultAsync(a => a.id == someId);

这很好用,但是,与大多数嵌套表不同,在大多数嵌套表中我想要所有或足够接近所有字段,而User表中的字段远远超出了我想要的数量。我真的只需要3或4个字段,而不是20个字段。这意味着由于行数的原因,select提取了比我想要的更多的数据,并且导致性能下降。

我知道我可以使用匿名类型来控制选择,但是对于这种嵌套很深的东西,很快就会变得难以阅读和维护。

我要做的基本上是进入ThenInclude(g => g.User)并仅选择该级别的3或4个字段。 EF Core是否可以通过这种方式实现?

[编辑1]

根据要求,这就是为什么我不喜欢匿名类型方法的原因:

dbContext.Set<A>().Select(a => new A {
     Id = a.Id,
     Description = a.Description,
     MapUrl = a.MapUrl,
     ListofB = a.B.Select(b => new B {
        Id = b.Id,
        Field1 = b.Field1,
        // Now nest this for another 6 levels and see how unwieldy it becomes when really it's down in g.User where I want to only get a few columns.
        ListOfC = b.C.Select(c => new C {
             Id = c.Id,
             //and so on and so on.
        })
     })
});

0 个答案:

没有答案
相关问题