我需要帮助构建一个linq查询,该查询将返回在特定消息的日志表中显示最多的用户名列表。
public class Log
{
public string Username {get; set;}
public string Message {get; set;}
}
我对消息为“已创建用户”,“已修改用户”或“已删除用户”的行感兴趣。
到目前为止,我有:
public IQueryable<Log> GetTop5ActiveUsersByManagementMessages()
{
return this.ObjectContext.Logs
.Where(w => w.Message == "Created User" ||
w.Message == "Removed User" ||
w.Message == "Updated User").Take(5);
}
我希望根据日志表中这些消息的数量或条目返回前5个用户名。
答案 0 :(得分:5)
使用分组来完成此任务:
this.ObjectContext.Logs
.Where(w => w.Message == "Created User" ||
w.Message == "Removed User" ||
w.Message == "Updated User")
.GroupBy(w => w.Username)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.Take(5);