2011-06-10 30 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);