public class Item
{
public int Id {get; set;}
public bool Selected {get; set;}
}
List<Item> itemList = new List<Item>(){ /* fill with items */ };
我需要创建一个满足以下条件的项目列表。从itemList
,我需要对项目进行分组Id
,然后从每个组中选择一个项目。所选项目必须是其中之一Selected == true
。如果组中没有项目被选中,那么任何项目都可以被选中,没关系,但必须选择一个。
基于这个问题: How to get distinct instance from a list by Lambda or LINQ
我能够将以下内容放在一起,这似乎可行:
var distinctList = itemList.GroupBy(x => x.Id,
(key, group) => group.Any(x => x.Selected) ?
group.First(x => x.Selected) : group.First());
有没有更有效或更简单的方法来实现这一目标?我试过FirstOrDefault()
但似乎无法让它做我需要的。我对上述代码效率的担忧是对 Any() 的调用。