我有以下表格:
研究中心:
| 识别码|名称名称名称|
| - -|- -|
| 一个|站点1|
| 2个|站点2|
项目名称:
| 识别码|版本号|项目名称|站点ID|
| - -|- -|- -|- -|
| 一个|一个|测试1|一个|
| 一个|2个|测试2|一个|
其中Id
和Version
是主键。
我想得到一个网站和它的最新项目。
我目前的最佳解决方案如下:
var sitesFirst = await context.Sites.AsNoTracking().Include(s => s.UserRelations).ToListAsync();
foreach (var site in sitesFirst)
{
var projects = await context.Projects.AsNoTracking()
.Where(p => p.SiteId == site.Id)
.GroupBy(p => p.Id)
.Select(grouping => grouping.OrderByDescending(p => p.Version).First())
.ToListAsync();
site.Projects = (List<Project>?)projects;
}
return sitesFirst;
这对于多次往返不是最佳的。
我尝试过不同的方法来分组和降序排序,但EF似乎经常抱怨它不能翻译它。
这是使用EF 6时的情况
1条答案
按热度按时间hgqdbh6s1#
如果您有DTO类(例如
SiteDto
),则可以使用Select
投影到该类中。