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]
。