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

C# 如何在单个实体框架查询中返回多个子集合Count(),c#,.net,entity-framework,linq-to-entities,C#,.net,Entity Framework,Linq To Entities,在实体框架中,我有两个实体,父实体和子实体 父实体具有子实体的集合 在我的查询中,我只想返回父实体(完全类型的EF类型)和子实体的Count()(这可以设置为父实体上的属性),但我只想在对数据库的一次调用中执行此操作,而不需要编写自定义的S-Proc。这可能吗 重要的是,我想将此转换为一个查询: EFContext content = new EFContext(); IQueryable<Parent> parentQuery = context.Parent.Select();

在实体框架中,我有两个实体,父实体和子实体

父实体具有子实体的集合

在我的查询中,我只想返回父实体(完全类型的EF类型)和子实体的Count()(这可以设置为父实体上的属性),但我只想在对数据库的一次调用中执行此操作,而不需要编写自定义的S-Proc。这可能吗

重要的是,我想将此转换为一个查询:

EFContext content = new EFContext();
IQueryable<Parent> parentQuery = context.Parent.Select();
foreach(Parent parent in parentQuery)
{
  parent.NoChildItems = parent.Childs.Count();
}
EFContext content=new EFContext();
IQueryable parentQuery=context.Parent.Select();
foreach(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);

简而言之,您已经填充了您的属性。

谢谢您的回答,但是有没有不使用匿名类的方法呢?我还以为您会这么说呢!不用客气,谢谢你的帮助。上面的解决方案会导致多个db调用。如何在一次调用中检索ParentModel中所有记录的计数?@RobinKedia这可能不会导致EF6中的多个DB调用。