class obj
{
int typeID; //10 types 0-9
string uniqueString; //this is unique
}
Angenommen, es gibt eine Liste mit 100 Elementen von obj, aber nur 10 eindeutigen Typ-IDs.
Ist es möglich, eine LINQ-Abfrage zu schreiben, die die 10 eindeutigen Ints aus der Liste der Objekte zurückgibt?
Antworten:
quelle
Angenommen, Sie möchten das vollständige Objekt, möchten sich aber nur mit der Unterscheidbarkeit befassen
typeID
, dann ist in LINQ nichts eingebaut, um dies zu vereinfachen. (Wenn Sie nur dietypeID
Werte wollen , ist es einfach - projizieren Sie mitSelect
und verwenden Sie dann den normalenDistinct
Aufruf.)In MoreLINQ haben wir den
DistinctBy
Operator, den Sie verwenden können:Dies funktioniert jedoch nur für LINQ to Objects.
Sie können eine Gruppierung oder eine Suche verwenden, es ist nur etwas nervig und ineffizient:
quelle
Wenn Sie nur reines Linq verwenden möchten, können Sie groupby verwenden:
Wenn Sie möchten, dass eine Methode in der gesamten App verwendet wird, ähnlich wie bei MoreLinq :
Wenn Sie diese Methode verwenden, um die unterschiedlichen Werte nur mit der Id-Eigenschaft zu ermitteln, können Sie Folgendes verwenden:
Sie können mehrere Eigenschaften verwenden:
quelle
Sicher verwenden
Enumerable.Distinct
.Bei einer Sammlung von
obj
(z. B.foo
) würden Sie so etwas tun:quelle
Ich denke, das ist es, wonach Sie suchen:
Ähnlich wie bei der Rückgabe eines bestimmten IQueryable mit LINQ?
quelle
.First
ist in Ordnung, da Sie die Gruppe nicht hätten, wenn nichts drin wäre.GroupBy
, um dies ebenfalls zu vereinfachen - siehe meine Antwort für ein Beispiel.Wenn Sie nur Linq verwenden möchten, können Sie die Methoden Equals und GetHashCode überschreiben .
Produktklasse :
Haupt Methode:
quelle
Ich wollte bestimmte Daten an Dropdown-Listen binden und sie sollten eindeutig sein. Ich habe folgendes gemacht:
Sehen Sie, ob es hilft
quelle