LINQ to Entity Оптимизация запросов - PullRequest
2 голосов
/ 09 апреля 2011

В настоящее время у меня есть следующая логика, которая составляет список из 4 целых чисел, где каждое целое представляет сумму всех голосов для определенного идентификатора элемента (1, 2, 3 или 4):

List<int> totals = new List<int>();

using (RepositoryEntities entityContext = new RepositoryEntities())
{
    totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 1));
    totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 2));
    totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 3));
    totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 4));
}

Это работает очень хорошо, но я подвергаю сомнению эффективность таких запросов, потому что это, кажется, фактически генерирует и выполняет 4 отдельных запроса.В идеале я хотел бы иметь один эффективный запрос, который возвращает мне 4 суммы.

Есть идеи?
Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 09 апреля 2011

Вы можете обернуть свою логику в один запрос

totals.AddRange(entityContext.ItemVotes
    .Where(iv => iv.Vote >= 1 && iv.Vote <= 4)
    .GroupBy(iv => iv.Vote)
    .OrderBy(grp => grp.Key)
    .Select(grp => grp.Count());

(этот код не проверен и может быть не совсем обычным, но просто выдвигать идею)

0 голосов
/ 09 апреля 2011

в LINQ метод .Count () форсирует выполнение запроса. Если вам нужно 4 разных итога, нет другого способа получить это в одном утверждении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...