Есть два класса: сервер и матч.
public class Server
{
public int Id {get; set;}
...
public virtual ICollection<Match> Matches {get; set;}
}
public class Match
{
public int Id {get; set;}
public sting Timestamp {get; set;}
...
public virtual Server Server {get; set;}
}
Между ними связь One-to-many. Нужно посчитать среднее количество матчей в день на каждом сервере.
Сейчас это делаю примерно так (пробовал по-разному): в классе сервер определил метод
public double GetAverageMatchesByDay()
{
if (Matches.Count == 0) return 0;
retrun Matches
.ToList()
.GroupBy(m => DateTimeOffset.Parse(m.Timestamp).UtcDateTime.Date)
.Select(g => g.Count())
.Average();
}
Ну и дальше, где нужно:
foreach(var server in context.Servers)
{
var averageMatchesPerDay = server.GetAverageMatchesPerDay();
}
Проблема в том, что при 10 000 серверов и всего лишь по 10 матчей на каждом, это работает уже очень долго, матчей предполагается гораздо больше.
Как правильно реорганизовать связь, либо способ хранения, либо способ выборки всего этого, чтобы скорость ответа не превышала пару секунд?
Заранее спасибо.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей