public class Item
{
public int Id {get; set;}
public bool Selected {get; set;}
}
List<Item> itemList = new List<Item>(){ /* fill with items */ };
次の条件を満たすアイテムのリストを作成する必要があります。から、アイテムをグループ化してから、各グループから1つのアイテムを選択するitemList
必要があります。Id
選択するアイテムは、Selected == true
。グループ内のアイテムが選択されていない場合は、任意のアイテムを選択できます。問題はありませんが、1つを選択する必要があります。
この質問に基づく: LambdaまたはLINQによるリストから個別のインスタンスを取得する方法
私は以下をまとめることができました、それはうまくいくようです:
var distinctList = itemList.GroupBy(x => x.Id,
(key, group) => group.Any(x => x.Selected) ?
group.First(x => x.Selected) : group.First());
これを達成するためのより効率的またはより簡単な方法はありますか?試しFirstOrDefault()
ましたが、必要なことを実行できなかったようです。上記のコードの効率に関する私の懸念は、Any()の呼び出しです。