我有这个查询可以工作但是当我尝试在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]
我做错了什么?谢谢!
答案 0 :(得分:20)
您的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());
上面的第一个例子应该更有用,因为它也给出了每个组的ID。
答案 1 :(得分:0)
尝试tableName.GroupBy(x => x.ColumnId).Select(x => x.Count())