使用C# LINQ按对象属性对列表进行排序,选择X数量

3
基本上我正在寻找一种在LINQ中选择列表中的前三个分组对象的方法。
例如,一个列表可能包含:
{"AAA", "AAA", "AAA", "AAA", "BBB", "BBB", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "DD", "EE", "EE"}
而我想要返回的列表将会是:
{"AAA", "AAA", "AAA", "BBB", "BBB", "CCC", "CCC", "CCC", "DD", "EE", "EE"}
这意味着它将返回前三个分组元素(如果没有3个元素,它将返回尽可能多的元素1,2)
我所做的是:
List<Object> sorted = mainList.OrderBy(x => x.NAME).ToList();

我需要使用某种形式的代码,才能返回上面的第一个列表。

我想我需要使用一些

 .Select() or .SelectMany()

但我不太确定如何指定获取每个组的前X个,并且我没有找到任何在线示例展示我需要的内容。

谢谢

1个回答

6

要获取每个组中的前X个项目,您需要先对所有项目进行分组。在分组后,Take方法允许您从该序列中获取最多前X个项目:

var query = data.GroupBy(item => item.Name)
    .SelectMany(group => group.Take(3));

这正是我所需要的,谢谢! - sl133

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接