LINQ to SQL select distinct aus mehreren Spalten
Bin ich mit LINQ to SQL, wählen Sie einige Spalten aus einer Tabelle. Ich möchte, um loszuwerden, das doppelte Ergebnis auch.
Dim customer = (From cus In db.Customers Select cus.CustomerId, cus.CustomerName).Distinct
Ergebnis:
- 1 David
- 2 James
- 1 David
- 3 Smith
- 2 James
- 5 Joe
Wollte Ergebnis:
- 1 David
- 2 James
- 3 Smith
- 5 Joe
Kann jemand mir zeigen, wie man das erwartete Ergebnis? Danke.
wie ist dein Datenbank-design? Aus der Abfrage, die Sie gab, ist es nicht möglich, identische Gegenstände der Ausnahme, dass die db wirklich habe doppelte Artikel (id und name sind nicht die einzigen Felder gibt?)
Die Tabelle ist nur log-Tabelle für Kunden um. Also, ja, es ist möglich, speichern Sie die gleiche CustomerId in der Spalte.
Es funktioniert gut für mich (mit einer List(Of T), nicht versuchen, mit einer Linq to SQL, entity-set...)
Die Tabelle ist nur log-Tabelle für Kunden um. Also, ja, es ist möglich, speichern Sie die gleiche CustomerId in der Spalte.
Es funktioniert gut für mich (mit einer List(Of T), nicht versuchen, mit einer Linq to SQL, entity-set...)
InformationsquelleAutor Narazana | 2010-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Mühe, die Sie haben, ist, dass VB.NET behandelt werden die Objekte zurückgegeben, die aus einer Linq-Abfrage, anders als in C# wird, die ist, warum viele der Antworten hier sind von verblüfft C# - Entwickler. VB.NET gibt mutable Objekte von Linq-Abfragen. C# liefert unveränderliche Objekte. Also, in C# Gleichstellung ist bereits für Sie verarbeitet, aber in VB.NET Sie müssen angeben, welche Felder werden als gleich angesehen, mit der
Key
Schlüsselwort. Sie können dies leicht in LinqPad selbst:In deinem Beispiel, setzen Sie die
Key
Schlüsselwort zu definieren, welche Felder in der Teilnahme der Geschlechter zu überprüfen, und unterscheidet richtig funktionieren.Dim customer = (From cus In db.Customers Select Key cus.CustomerId, Key cus.CustomerName).Distinct()
Siehe hier: Linq-Gruppe auf Mehreren Feldern - VB.NET Anonyme, Schlüssel
und hier: Deutlich in LINQ anonyme Datentypen (die in VB.NET)
InformationsquelleAutor mattmc3
Sollte Ihnen eine Liste von verschiedenen Kunden-Namen und-IDs. Nicht sicher über die Bestellung.
InformationsquelleAutor Watson Kaunda
könntest du diesen Ansatz verwenden:
InformationsquelleAutor Massimo Della Calce
Sollten Sie die überlastung deutlich, dass nimmt einen IEqualityComparer. Ich habe eine ähnliche Frage beantwortet über, Außer auf CodeProject eine Weile zurück, wo ich unter anderem ein DelegateEqualityComparer Klasse, die Sie können, verwenden Sie einfach einen lambda-Ausdruck oder eine andere Funktion, ohne eigentlich schreiben die Klasse Umsetzung der comparer.
http://www.codeproject.com/Messages/3244828/Re-How-do-I-do-an-effective-Except.aspx
Den Rat zu benötigen, gleichbedeutend hash-codes ist wahrscheinlich für so viel Verschiedene, wie es zu der Ausnahme.
Verwenden, diese mit anonymen Typen, werden Sie wahrscheinlich brauchen eine helper-Methode zum erstellen der comparer. So etwas sollte funktionieren, wenn Sie pass in die Abfrage (vor dem Aufruf Erkennbar, natürlich) als der erste parameter, um die Typ-Inferenz arbeiten.
InformationsquelleAutor Gideon Engelberth