Linq2Sql:查询优化

时间:2011-01-15 04:15:06

标签: .net linq linq-to-sql optimization query-optimization

我有以下查询:

  1. 从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();
    
  2. 使用此列表获取所需团队的所有部门:

    IList<InfrStadSector> sectorsForAllTeams = (from sector in DbContext.sectors
                             where teamIds.Contains(sector.TeamId)
                             select sector
                            ).ToList();
    
  3. 根据行业创建体育场列表:

    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);
    }
    
  4. 我担心的是,对于从DB收到的收集,我需要在每个团队一次在客户端应用Where / ToList

    有没有办法优化它?

    感谢。

    P.S。潜在地,我可以在服务器上对项目进行排序(使用索引),然后对teamIds进行排序并使用扇区集合而无需“查询”集合......但是可能有更好的方法来优化它?

1 个答案:

答案 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