Ich versuche, .distinct in Linq zu verwenden, um Ergebnisse basierend auf einem Feld der Tabelle zu erhalten (daher sind keine vollständigen doppelten Datensätze aus der Tabelle erforderlich).
Ich weiß, dass ich grundlegende Abfragen wie folgt schreibe:
var query = (from r in table1
orderby r.Text
select r).distinct();
aber ich brauche Ergebnisse, bei denen r.text
nicht dupliziert wird.
Antworten:
Versuche dies:
Dadurch wird die Tabelle nach gruppiert
Text
und die erste Zeile aus jeder Gruppe verwendet, was zu Zeilen führt, in denen sieText
unterschiedlich sind.quelle
table1.GroupBy(x => new { x.Text, x.Property2, x.Property3 }).Select(x => x.First());
GroupBy
erstellt keine leeren Gruppen, siehe meinen vorherigen Kommentar. Höchstwahrscheinlich enthält Ihr Code mehr als das, was Sie hier sehen. Vielleicht haben Sie auch eineWhere
oder eine Bedingung für dieFirst
.MoreLinq verfügt über eine DistinctBy- Methode, die Sie verwenden können:
Damit können Sie Folgendes tun:
Die Implementierung der Methode (kurz vor der Argumentvalidierung) ist wie folgt:
quelle
GroupBy
Bedarf. Beide Methoden verwenden die Standardeinstellung,EqualityComparer
wenn keine angegeben ist.Klingt so, als ob Sie dies wollen:
Dadurch werden Zeilen ausgewählt, in denen das
Text
eindeutig ist.quelle
Die obige Antwort von Daniel Hilgarth führt zu einer
System.NotSupported
Ausnahme mit Entity-Framework . Mit Entity-Framework muss es sein:quelle
Es gibt viele Diskussionen zu diesem Thema.
Eine davon finden Sie hier :
Einer der beliebtesten Vorschläge war die Distinct-Methode, bei der ein Lambda-Ausdruck als Parameter verwendet wurde, wie @Servy hervorgehoben hat.
Der Chefarchitekt von C #, Anders Hejlsberg, hat hier die Lösung vorgeschlagen . Außerdem wurde erklärt, warum das Framework-Designteam beschlossen hat, keine Überladung der Distinct-Methode hinzuzufügen, für die ein Lambda erforderlich ist.
quelle
Nach allem, was ich gefunden habe, ist Ihre Anfrage größtenteils korrekt. Ändern Sie einfach "select r" in "select r.Text" und das sollte das Problem lösen. So hat MSDN dokumentiert, wie es funktionieren soll.
Ex:
quelle
quelle
Versuchen Sie diesen Code:
quelle
Sie können dies versuchen:
table1.GroupBy(t => t.Text).Select(shape => shape.r)).Distinct();
quelle