我有一个IList集合
public IList<MyObject> Items
我可以对该列表进行分组并获取每个组的第一个元素
Items.GroupBy(x => x.Type).Select(grp => grp.First()).ToList();
如何对该列表进行分组,而不是第一个元素(例如:second)??
答案 0 :(得分:0)
您可以使用Enumerable.ElementAt
:
var everySecond = Items.GroupBy(x => x.Type).Select(grp => grp.ElementAt(1)).ToList();
如果项目不是很多,您可以使用ElementAtOrDefault
代替null(对于参考类型)。
修改:“我有selectedItem,想要在组中显示为主要元素”:
所以实际上你想获得第一个匹配特定条件的东西,在这种情况下它是被选中的,你可以订购该组并采取第一个:
var everySelected = Items
.GroupBy(x => x.Type)
.Select(grp => grp.OrderByDescending(x => x == selectedItem).First())
.ToList();
我使用OrderByDescending
(认为true为1,false为0)进行比较。这样,每个与所选项目具有相同引用的项目都是第一个(用逻辑替换它们如何比较它们而不是引用相等)。