2013-07-03 24 views
2

我有一个按名称分组的项目列表。从LINQ和C#的分组列表中获取MAX 5项目

因此,例如我有项[0],其具有4个项目,项目[1],其具有6个项目,项目[2],其具有10个项目等

现在我想获得最多5个项目,即那些在这个GroupedList中具有最多项目的项目。

我收到分组名单如下: -

IEnumerable<List<AuditLog>> auditLogsGouped = auditLogs.GroupBy(x => x.EntityValue).Select(grp => grp.ToList()); 

我怎样才能从这个列表中的MAX 5个项目?

感谢您的帮助和时间

回答

4

这应该为你做一招:

auditLogsGouped.OrderBy(x=>x.Count).Reverse().Take(5); 

或更好:

auditLogsGouped.OrderByDescending(x=>x.Count).Take(5); 
+5

OrderByDescending也许什么? –

+0

@JonSkeet:提供了两种解决方案。谢谢 ! – Tigran

+0

感谢@Tigran,那就是诀窍! – Johann

0

你应该看看Enumerable.Take。这里的documentation和相关部分:

public static IEnumerable<TSource> Take<TSource>(
     this IEnumerable<TSource> source, 
    int count 
) 

采取列举源,并产生元素,直到数 元素已经取得或源包含没有更多的元素。如果 计数超过源中元素的数量,则返回源 的所有元素。

所以这应该做你想要的只是调用.Take(5)