C# EF Core-一个sql请求中的多个计数

C# EF Core-一个sql请求中的多个计数,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我试图从一个表中获得多个计数数据,但我没有得到我想要的 代码 var result = _db.Users.Select(g => new { count = _db.Users.Count(), acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation) }); result = [ { count = ?, acCount = ? }, { c

我试图从一个表中获得多个计数数据,但我没有得到我想要的

代码

var result = _db.Users.Select(g => new
{
    count = _db.Users.Count(),
    acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation)
});
result = [
    { count = ?, acCount = ? },
    { count = ?, acCount = ? },
    { count = ?, acCount = ? },
    { count = ?, acCount = ? }
]
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 = ? }
预期结果

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个用户)

显然这是错误的,因为我使用的是
Select
,它给了我N次计数(N是用户表中的行数)。
我想要的是能够得到这些计数直接和一次,最好在一个请求

我还尝试了
GroupBy(I=>1)
,但这会产生大量sql请求


谢谢。

由于
\u db.Users的原因,正在对用户的每一行执行查询。请选择
语句

您可以使用以下查询仅从表中获取计数:

var counts = new {
    count = _db.Users.Count(),
    acCount = _db.Users.Count(u => u.User.State == AccountState.AwaitingConfirmation)
};
要在单个查询中获取两个计数-如注释中所述(请注意,使用标志标识等待确认并按常量分组,然后使用总和根据标志获取计数):


你能更清楚地说明预期的结果吗?也就是说,请进一步解释问题本身以及您想要得到的确切信息(我没有得到您想要得到的)。请查看我的编辑。因此,您想将每个
count
值添加到上一个值中吗?我需要2个计数,我的查询给出了2个计数*表中的行数。按常量分组(1)技术有效(我的意思是,使用单SQL)在最新的EF Core 2.1中-请参阅将此与
一起使用,首先
会给出最大为1的计数。无论如何,我最终使用了
.ToArray()[0]