Я пытаюсь получить статистику по нескольким счетам из таблицы, но не получаю то, что хочу.
код
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 - количество строк в таблице пользователей).
Что я хочу, так это чтобы можно было получать эти подсчеты напрямую и один раз, предпочтительно за один запрос.
Я также пытался GroupBy(i => 1)
, но это дает много запросов SQL ..
Спасибо.