实体框架多次使用单个查询计数

TYR*_*AEL 10 c# entity-framework entity-framework-4 asp.net-mvc-3

很抱歉,如果有人询问过,但如何通过一次调用数据库来改进以下内容?

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

Ari*_*ion 8

这可能有所帮助:

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();
Run Code Online (Sandbox Code Playgroud)


Jah*_*ine 6

首先,你可以Rejected像这样计算总计和接受:

Rejected = Total - Approved
Run Code Online (Sandbox Code Playgroud)

为了进一步改进,您可以一次性计算它们;

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

更新: 现在简单的黑客攻击:只需要第一行

(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);
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个更清洁的