如何在单个entity framework查询中返回许多子集合Count()

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

父级有一组子实体。

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

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

EFContext content = new EFContext(); IQueryable parentQuery = context.Parent.Select(); foreach(Parent parent in parentQuery) { parent.NoChildItems = parent.Childs.Count(); } 

当我在此激活枚举器时,它会调用列表的数据库,并再次为每个Count()查询调用。 我每次返回大约100件物品,所以宁愿不为儿童物品的数量做100个单独的电话。

谢谢你的帮助。

这应该工作:

 IQueryable parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() }); 

编辑

如果你定义:

 public class ParentModel { public Task Parent { get; set; } public int ChildCount { get; set; } } 

您可以使用

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

编辑

你也可以这样做:

 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); 

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