c# - 聚合取n条最多的记录

标签 c# .net linq

我需要帮助构建一个 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 个用户名

最佳答案

使用分组来完成这个任务:

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);

关于c# - 聚合取n条最多的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309668/

相关文章:

c# - 使用反射获取对象函数

c# - Markdown 夏普/ Markdown .NET : How to retrieve non-formatted text from markdown?

c# - Winforms:Application.Exit 与 Environment.Exit 与 Form.Close

c# - Linq2SQL生成的奇怪SQL

asp.net - 标识列增量跳转

c# - 使用 IEqualityComparer 提高 LINQ 查询的性能

c# - 网格拆分器和最小宽度

c# - 连接 USB 设备时如何接收通知?

c# - 使 slider 使用现有的 IValueConverter

c# - 从多个表创建 LINQ 选择