如何在单个实体框架查询中返回许多子集合Count()

Jam*_*mes 5 .net c# linq-to-entities entity-framework

我在Entity Framework中有两个实体,Parent和Child.

父级有一组子实体.

在我的查询中,我想只返回父实体(完全类型的EF类型)以及子实体的Count()(这可以设置为Parent上的属性),但我只想在一次调用数据库,无需编写自定义S-Proc.这可能吗?

基本的,我想把它变成一个单一的查询:

EFContext content = new EFContext();
IQueryable<Parent> parentQuery = context.Parent.Select();
foreach(Parent parent in parentQuery)
{
  parent.NoChildItems = parent.Childs.Count();
}
Run Code Online (Sandbox Code Playgroud)

当我在此激活枚举器时,它会调用列表的数据库,并再次为每个Count()查询调用.我每次返回大约100个项目,因此不希望仅针对子项目的数量进行100次单独调用.

谢谢你的帮助.

Luk*_*Led 10

这应该工作:

IQueryable parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() });
Run Code Online (Sandbox Code Playgroud)

编辑

如果你定义:

public class ParentModel
{
    public Task Parent { get; set; }
    public int ChildCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用

IQueryable parentQuery = context.Parent.Select(p => new ParentModel { Parent = p, ChildCount = p.Childs.Count() });
Run Code Online (Sandbox Code Playgroud)

编辑

你也可以这样做:

var parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() }).ToList();
parentQuery.ForEach(p => p.Parent.ChildCount = p.ChildCount);
var result = return parentQuery.Select(p => p.Parent);
Run Code Online (Sandbox Code Playgroud)

简短,你已经填充了你的财产.

  • 上面的解决方案但是导致多个数据库调用。一次调用如何获取ParentModel中所有记录的计数? (2认同)