-1

我有一个 IList 集合

public IList<MyObject> Items

我可以对该列表进行分组并获取每个组的第一个元素

Items.GroupBy(x => x.Type).Select(grp => grp.First()).ToList();

我怎样才能对该列表进行分组而不是第一个元素(例如:第二个)?

4

1 回答 1

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)进行比较。这样,与您选择的项目具有相同引用的每个项目都首先出现(将其替换为您希望如何比较它们而不是引用相等的逻辑)。

于 2015-01-26T13:01:39.627 回答