我有下一张表:
我在使用 C# 的 LINQ 中尝试做的是按 Created 列分组(忽略时间!)并在每个日期旁边显示它的计数,以便我可以获取我想要的任何顶部行。 这个查询我在 sql 中没有问题,如下所示:
SELECT CAST(Created AS DATE) 'Created', COUNT(*) AS 'Count'
FROM Alert
GROUP BY CAST(Created AS DATE)
ORDER BY 'Count' DESC
结果是:
但是,我想在 LINQ 中这样做,只是我所有的试用都失败了,有人可以指导我吗?
最佳答案
使用 DateTime
的 Date
属性:
var query = db.Alert
.GroupBy(a => a.Created.Date)
.Select(g => new { Created = g.Key, Count = g.Count() })
.OrderByDescending(x => x.Count);
Linq-To-Entities 似乎不支持 DateTime.Date
属性。所以你必须使用 DbFunctions.TruncateTime
.
那么这应该可以工作:
var query = db.Alert
.GroupBy(a => DbFunctions.TruncateTime(a.Created))
.Select(g => new { Created = g.Key, Count = g.Count() })
.OrderByDescending(x => x.Count);
关于.net - LINQ 和 EntityFramework : Getting first result after group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25500180/