区分IList并选择第二个元素

时间:2015-01-26 13:00:23

标签: c# list linq distinct linq-group

我有一个IList集合

public IList<MyObject> Items

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

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

如何对该列表进行分组,而不是第一个元素(例如:second)??

1 个答案:

答案 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)进行比较。这样,每个与所选项目具有相同引用的项目都是第一个(用逻辑替换它们如何比较它们而不是引用相等)。