У меня есть список команд из 15 000 человек, которым нужен отдельный запрос linq для возврата результатов.Несколько запросов LINQ to SQL. Оптимизация перечисления
А именно - [Выберите последние 10 игр для «команды»]
public IEnumerable<ResultsByDate> SelectLast10Games(DateTime date, string team)
{
return
( from e in db.E0s
where e.DateFormatted < date &&
(e.HomeTeam == team || e.AwayTeam == team)
orderby e.Date descending
select new ResultsByDate
{
Date = e.Date,
HomeTeam = e.HomeTeam,
AwayTeam = e.AwayTeam,
HomeGoals = e.FTHG,
AwayGoals = e.FTAG
}
).Take(10);
}
Этот запрос, вероятно, хорошо, кажется, достаточно быстро, когда называется 15000 раз.
Моя настоящая проблема заключается в том, что я должен перечислять каждый запрос, и это действительно убивает производительность.
Для каждого из этих запросов мне нужно запустить метод по 10 результатам и, следовательно, запросы нужно перечислить.
Вопрос в том, как я могу избежать 15 000 перечислений?
Я думал о размещении каждого из результатов в большой список и затем вызова .ToList() или что-то лучшее, но добавление в список перебирает, как она идет вдоль так что это не кажется жизнеспособным.
Есть ли способ объединить все 15000 LINQ запросы в один гигантский запрос LINQ, такие как ..
public IEnumerable<ResultsByDate> SelectLast10Games(DateTime date, List<string> Teams)
{
foreach(var team in Teams)
{ var query =
(from e in db.E0s
where e.DateFormatted < date &&
(e.HomeTeam == team || e.AwayTeam == team)
orderby e.Date descending
select new ResultsByDate
{
Date = e.Date,
HomeTeam = e.HomeTeam,
AwayTeam = e.AwayTeam,
HomeGoals = e.FTHG,
AwayGoals = e.FTAG
}
).Take(10);
}
}
Так заносить бы один огромный результирующий набор, который я могу затем перечислить на одном дыхании и работе оттуда ?
Я пробовал, но я не могу получить правильную петлю LINQ (если это возможно - и лучший способ исправить мою проблему).
Вся программа занимает ~ 29 минут. Без перечисления около 30 секунд, что не удивительно, но удовлетворительно, учитывая критерии.
Спасибо!