Hay*_*tam 3 c# entity-framework-core asp.net-core
我试图从表中获取多个计数统计信息,但没有得到我想要的。
代码
var result = _db.Users.Select(g => new
{
count = _db.Users.Count(),
acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation)
});
Run Code Online (Sandbox Code Playgroud)
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`
Run Code Online (Sandbox Code Playgroud)
预期结果
result = { count = ?, acCount = ? }
Run Code Online (Sandbox Code Playgroud)
实际结果(表中4个用户)
result = [
{ count = ?, acCount = ? },
{ count = ?, acCount = ? },
{ count = ?, acCount = ? },
{ count = ?, acCount = ? }
]
Run Code Online (Sandbox Code Playgroud)
显然这是错误的,因为我正在使用它Select,它给了我 N 次计数(N 是用户表中的行数)。
我想要的是能够直接一次获得这些计数,最好是在一个请求中。
我也尝试过GroupBy(i => 1),但这给出了很多 sql 请求..
谢谢。
由于语句,正在对用户的每一行执行查询_db.Users.Select。
您可以使用以下查询仅获取表中的计数:
var counts = new {
count = _db.Users.Count(),
acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation)
};
Run Code Online (Sandbox Code Playgroud)
要在单个查询中获取两个计数 - 如评论中所述(注意使用标志来识别等待确认并按常量分组,然后使用 sum 根据标志获取计数):
var counts =
_db.Users
.Select(e => new { AwaitingConfirmation =
u.User.State == AccountState.AwaitingConfirmation ? 1 : 0 })
.GroupBy(e => 1)
.Select(g => new
{
Count = g.Count(),
account = g.Sum(e => e.AwaitingConfirmation)
}).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |