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)
简短,你已经填充了你的财产.