2011-06-10 58 views
3

我需要帮助构建一个linq查询,该查询将返回特定消息的日志表中显示最多的用户名列表。n总数最多的记录

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 用户名

回答

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