2011-01-26 38 views
6

Tôi có truy vấn này hoạt động nhưng khi tôi cố gắng viết tương đương trong LINQ tôi nhận được SQL không chính xác được tạo ra.Làm thế nào để viết một nhóm đếm bằng truy vấn SQL trong LINQ?

truy vấn của tôi là:

SELECT COUNT(*) 
FROM tableName 
GROUP BY ColumnId 

Tôi đã thử viết nó như:

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

Nhưng nhìn vào LINQPad nó được sản xuất SQL:

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

Tôi gì làm sai? Cảm ơn!

Trả lời

18

Truy vấn LINQ của bạn đang đếm số nhóm nhưng truy vấn SQL của bạn đang tạo số lượng theo nhóm. Bạn muốn

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

để đếm số lượng theo nhóm.

Lưu ý rằng nếu bạn muốn chính xác SQL mà bạn muốn

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

Ví dụ đầu tiên ở trên nên có một chút hữu dụng hơn vì nó cung cấp cho các id của mỗi nhóm là tốt.

0

Hãy thử tableName.GroupBy(x => x.ColumnId).Select(x => x.Count())

Các vấn đề liên quan