Да, я пошел этим путем. Хотя этот ответ на самом деле не был проверен, похоже, он должен работать. Благодарю.

я есть следующий запрос:

Получить список необходимых командных идентификаторов из БД:

       , 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);
}

Меня беспокоит то, что для сбора, полученного из БД, мне нужно применять Where / ToList на стороне клиента один раз для каждой команды

Есть ли способ оптимизировать это?

Благодарю.

Постскриптум Потенциально, я мог бы сортировать элементы на сервере (используя индекс), затем сортировать teamIds и работать с коллекцией секторов без действительно «запроса» коллекции ... но, возможно, есть лучший способ оптимизировать это?

Ответы на вопрос(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.

 Budda18 янв. 2011 г., 03:05
Да, я пошел этим путем. Хотя этот ответ на самом деле не был проверен, похоже, он должен работать. Благодарю.
 Budda15 янв. 2011 г., 22:19
Если я применяю ToList () к teamSectors, я получаю следующую ошибку: Ожидается вызов метода Queryable. Получил 'teamSectors.ToList ()'. Имя параметра: информация. Попытка вызова AsQueryable () описана здесь:stackoverflow.com/questions/4697982/...
 tvanfosson15 янв. 2011 г., 22:28
Да, вам, вероятно, нужно сделать это, как только они будут преобразованы в объекты. Я обновлю ответ, чтобы отразить тот, который я дал на ваш другой вопрос.

Ваш ответ на вопрос