问题描述
我有两个模型
public class PageGroup
{
public PageGroup()
{
Pages = new HashSet<Page>();
}
public int GroupID { get; set; }
public string GroupTitle { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
public class Page
{
public Page()
{
}
public int PageID { get; set; }
public int GroupID { get; set; }
public string PageTitle { get; set; }
public string PageText { get; set; }
public virtual PageGroup PageGroup { get; set; }
}
和一个视图模型
public class ShowGroupsviewmodel
{
public int GroupID { get; set; }
public string GroupTitle { get; set; }
public int PageCount { get; set; }
}
public async Task<IEnumerable<ShowGroupsviewmodel>> GetListGroupsServiceAsync()
{
return await _context.PageGroups.Include(p => p.Pages.Count).Select(pa => new ShowGroupsviewmodel()
{
GroupID = pa.GroupID,GroupTitle = pa.GroupTitle,PageCount = pa.Pages.Count
}).ToListAsync();
}
但 PageCount 不起作用。运行时项目的值为零。我怎样才能填写这个属性? 我使用 .net 核心 3.1
解决方法
由于您使用的是 Ef 3.1 Include,因此不应使用 Include,因为 Include("Pages") 将从 SQl 服务器中获取所有 Page 实例并在此之后对其进行计数。
在 EF Net5 中,使用 Include 会更简单,但由于您使用的是 EF 3.1,请尝试以下操作:
public async Task<IEnumerable<ShowGroupsViewModel>> GetListGroupsServiceAsync()
{
return await ( from pg in _context.PageGroups
join p in context.Pages
on pg.GroupId equals p.GroupId
group pg by new { pg.GroupId,pg.GroupTitle} into g
select new ShowGroupsViewModel{
GroupId = g.Key.GroupId,GroupTitle =g.Key.GroupTitle
PagesCount = g.Count()
}).ToListAsync();
}