Как написать группу выборки по SQL-запросу в LINQ? - PullRequest
8 голосов
/ 26 января 2011

У меня есть этот запрос, который работает, но когда я пытаюсь написать эквивалент в LINQ, я получаю неправильный SQL.

Мой запрос:

SELECT COUNT(*)
FROM tableName
GROUP BY ColumnId

Я пытался написать это как:

tableName.GroupBy(x => x.ColumnId).Count()

Но, глядя в LINQPad, он выдает SQL:

SELECT COUNT(*) AS [value]
FROM (
SELECT NULL AS [EMPTY]
FROM [tableName] AS [t0]
GROUP BY [t0].[ColumnId]
) AS [t1]

Что я делаю не так? Спасибо!

Ответы [ 2 ]

20 голосов
/ 26 января 2011

Ваш запрос LINQ подсчитывает количество групп, но ваш запрос SQL производит подсчет по группам. Вы хотите

var counts = tableName.GroupBy(x => x.ColumnId)
                      .Select(g => new { g.Key, Count = g.Count() });

чтобы получить счет по группам.

Обратите внимание, что если вы хотите точно такой же SQL, как вы хотите

var counts = tableName.GroupBy(x => x.ColumnId)
                      .Select(g => g.Count());

Первый приведенный выше пример должен быть немного более полезным, поскольку он также дает идентификаторы каждой группы.

0 голосов
/ 26 января 2011

Попробуйте tableName.GroupBy(x => x.ColumnId).Select(x => x.Count())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...