Die Auswahl bestimmter Elemente aus IGrouping mit LINQ

public class Item
{
    public int Id {get; set;}
    public bool Selected {get; set;}
}

List<Item> itemList = new List<Item>(){ /* fill with items */ };

Brauche ich, um eine Liste der Elemente erstellen, die die folgenden Kriterien erfüllen. Von itemList, ich brauche die Gruppe der Elemente von Id und dann wählen Sie ein einzelnes Element aus jeder Gruppe. Der gewählte Punkt muss man in die Selected == true. Wenn kein Element in der Gruppe markiert ist, dann wird jedes Element ausgewählt werden kann, ist es egal, aber man muss gewählt werden.

Basierend auf dieser Frage:
Wie man eindeutige Instanz aus einer Liste von Lambda-Ausdruck oder mit LINQ

War ich in der Lage, um gemeinsam das folgende, das scheint zu funktionieren:

var distinctList = itemList.GroupBy(x => x.Id, 
    (key, group) => group.Any(x => x.Selected) ? 
        group.First(x => x.Selected) : group.First());

Ist es effizienter oder einfacher Weg, dies zu erreichen? Ich habe versucht FirstOrDefault() aber konnte nicht scheinen, um es zu tun, was ich brauchte. Mein Anliegen mit der Effizienz im obigen code, wird der Anruf an ein().

  • Ist das nicht einfach genug für Sie? Fügen Sie in ein paar zusätzliche Zeilenumbrüche und/oder entfernen Sie einige der Einbuchtung, so dass es auf den Bildschirm passen besser und es sieht gut aus für mich.
  • Ich verstehe nicht, die unten abstimmen? Die Antworten sind einfacher und mehr effizient als mein Beispiel oben. Das ist, warum ich die Frage gestellt habe.
Schreibe einen Kommentar