如何在LINQ中通过SQL查询编写选择计数组?

Kev*_*vin 9 linq-to-sql

我有这个查询,但是当我尝试在LINQ中编写等效的时候,我得到了不正确的SQL.

我的查询是:

SELECT COUNT(*)
FROM tableName
GROUP BY ColumnId
Run Code Online (Sandbox Code Playgroud)

我试过把它写成:

tableName.GroupBy(x => x.ColumnId).Count()
Run Code Online (Sandbox Code Playgroud)

但是看看LINQPad它正在生成SQL:

SELECT COUNT(*) AS [value]
FROM (
SELECT NULL AS [EMPTY]
FROM [tableName] AS [t0]
GROUP BY [t0].[ColumnId]
) AS [t1]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢!

jas*_*son 23

您的LINQ查询正在计算组的数量,但您的SQL查询正在按组生成计数.你要

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

按组取得计数.

请注意,如果您想要完全相同的SQL

var counts = tableName.GroupBy(x => x.ColumnId)
                      .Select(g => g.Count());
Run Code Online (Sandbox Code Playgroud)

上面的第一个例子应该更有用,因为它也给出了每个组的ID.