Entity Framework несколько подсчетов с помощью одного запроса - PullRequest
9 голосов
/ 17 января 2012

Извините, если это было задано, но как я могу улучшить следующее с помощью одного обращения к базе данных?

var statsModel = new
{
     Total = _db.Messages.Count(),
     Approved = _db.Messages.Count(x => x.Approved),
     Rejected = _db.Messages.Count(x => !x.Approved),
};

Ответы [ 2 ]

6 голосов
/ 17 января 2012

Это может помочь:

var statsModel =(
        from message in _db.Messages
        group message by 1 into g
        select new
        {
            Total = g.Count(),
            Approved =g.Count (x =>x.Approved),
            Rejected =g.Count (x =>!x.Approved)
        }
    ).FirstOrDefault();
5 голосов
/ 17 января 2012

Прежде всего вы можете вычислить Rejected по Total и Accepted следующим образом:

Rejected = Total - Approved

И для дальнейшего улучшения вы можете вычислить оба из них за один выстрел;

from m in _db.Messages
let Total =  _db.Messages.Count()
let Accept = _db.Messages.Count(x => x.Approved == true)
select new {Total , Accept})

ОБНОВЛЕНИЕ: простой взлом на данный момент: просто возьмите первый ряд

(from m in _db.Messages
let Total =  _db.Messages.Count()
let Accept = _db.Messages.Count(x => x.Approved == true)
select new {Total , Accept}).Take(1);

Но я ищу более чистый

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