【发布时间】:2018-06-30 20:30:39
【问题描述】:
我试图从一个表中获取多个计数统计信息,但没有得到我想要的。
代码
var result = _db.Users.Select(g => new
{
count = _db.Users.Count(),
acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation)
});
Sql 请求
SELECT (
SELECT COUNT(*)
FROM `users` AS `c`
) AS `count`, (
SELECT COUNT(*)
FROM `users` AS `u`
INNER JOIN `users` AS `u.User` ON `u`.`UserId` = `u.User`.`Id`
WHERE `u.User`.`State` = 4
) AS `acCount`
FROM `users` AS `g`
预期结果
result = { count = ?, acCount = ? }
实际结果(表中有 4 个用户)
result = [
{ count = ?, acCount = ? },
{ count = ?, acCount = ? },
{ count = ?, acCount = ? },
{ count = ?, acCount = ? }
]
显然这是错误的,因为我使用的是 Select,它给了我 N 次计数(N 是 users 表中的行数)。
我想要的是能够一次直接地获得这些计数,最好是在一个请求中。
我也尝试过GroupBy(i => 1),但这会产生很多 sql 请求..
谢谢。
【问题讨论】:
-
你能更清楚地显示预期的结果吗?即,请详细说明问题本身以及您想要得到的确切内容(我没有得到您想要得到的内容)。
-
请看我的编辑。
-
那么你想将每个
count值添加到前一个值吗? -
我需要 2 个计数,我的查询给了我 2 个计数 * 表中的行数。
-
按常量分组 (1) 技术在最新的 EF Core 2.1 中有效(我的意思是,使用单个 SQL) - 请参阅 stackoverflow.com/questions/50916302/…
标签: c# asp.net-core entity-framework-core