对不起,如果这已被问到,但是如何通过对数据库的单个调用来改进以下内容?使用单个查询的实体框架多次计数
var statsModel = new
{
Total = _db.Messages.Count(),
Approved = _db.Messages.Count(x => x.Approved),
Rejected = _db.Messages.Count(x => !x.Approved),
};
对不起,如果这已被问到,但是如何通过对数据库的单个调用来改进以下内容?使用单个查询的实体框架多次计数
var statsModel = new
{
Total = _db.Messages.Count(),
Approved = _db.Messages.Count(x => x.Approved),
Rejected = _db.Messages.Count(x => !x.Approved),
};
首先,你可以计算Rejected
由道达尔和接受这样的:
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})
UPDATE: 现在一个简单的黑客:只取第一行
(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);
但是我正在寻找一个更清洁的一个
与此相关的最后一个问题。它工作正常,但为每条消息返回{总计,接受}。所以我做的是“从_db.Messages 让m = _db.Messages.Count() 让Accept = _db.Messages.Count(x => x.Approved == true) select new {Total,Accept })FirstOrDefaul(); – TYRONEMICHAEL 2012-01-17 12:55:39
这可能帮助:
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();
至少'拒绝=总数 - 批准' – 2012-01-17 12:36:32
我的意思是我可以轻松地返回所有消息并在那里过滤掉表单,但我可能会有数千条消息。返回整个表格将是一个强烈的查询,这就是为什么我只需要返回计数。 – TYRONEMICHAEL 2012-01-17 12:42:09