我有以下查询:
从DB获取所需团队ID的列表:
IList<int> teamIds =
(from sector in DbContext.sectors
where sector.Type=typeValue
group sector by sector.TeamId into teamSectors
select teamSectors.Key
).ToList();
使用此列表获取所需团队的所有部门:
IList<InfrStadSector> sectorsForAllTeams = (from sector in DbContext.sectors
where teamIds.Contains(sector.TeamId)
select sector
).ToList();
根据行业创建体育场列表:
IList<InftStadium> stadiums = new List<InfrStadium>();
foreach(int teamId in teamIds)
{
IList<InfrStadSector> teamSectors =
sectorsForAllTeams.Where(sect=>sect.TeamId==teamIds).ToList();
stadiums.Add(new InfrStadium(teamId, teamSectors);
}
我担心的是,对于从DB收到的收集,我需要在每个团队一次在客户端应用Where / ToList
有没有办法优化它?
感谢。
P.S。潜在地,我可以在服务器上对项目进行排序(使用索引),然后对teamIds进行排序并使用扇区集合而无需“查询”集合......但是可能有更好的方法来优化它?
答案 0 :(得分:1)
我认为你可以一步到位。
var stadiums = DbContext.sectors
.Where( s => s.Type == typeValue )
.ToLookup( s => s.TeamId )
.Select( l => new InfrStadium( l.Key, l.ToList() )
.ToList();
虽然如果你能让InfrStadium
的构造函数取IEnumerable<Sector>
而不是List<Sector>
更好,那么你可以省略额外的ToList
。