verwendetes Datenbanksystem: <LINQ 2 SQL>
Hy,
ich arbeite seit kurzem mit Linq und "konvertiere" ein altes Programm auf Linq schreibweise um. Funktioniert auch soweit sehr gut. Ich suche jetzt eine Funktion (wenns die in LINQ überhaupt gibt), bei der man von eine Spalte alle Einträge ohne Duplicate bekommt.
z.B. für Firmen (siehe Anhang)
Ich könnte zwar alle Daten in ein Array kopieren und dann mit foreach aussortieren, jedoch wäre mir ein Linq-Befehl(e) lieber.
Ist das mit Linq möglich?
MfG
Tonka
Ich glaube Distinct ist da Deine Wahl
GroupBy gibts auch, habe ich aber noch nicht geschnallt wie man das verwendet
mbg
Rossegger Robert
mehr fragen mehr wissen
Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen
vielleicht hilft Dir dass hier weiter Enumerable::Distinct<(Of <(TSource>)>)-Methode (IEnumerable<(Of <(TSource>)>))
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
So, hab nun meinen Comparer Klasse gebaut, jedoch funkt das nicht so ganz. Mit google finde ich immer Beispiele, die aussehen wie meines.
public class CompanyComparer : IEqualityComparer<DbData>
{
#region IEqualityComparer<DbData> Member
public bool Equals(DbData x, DbData y)
{
return x.Company.Equals(y.Company);
}
public int GetHashCode(DbData obj)
{
return obj.GetHashCode();
}
#endregion
}
Aufruf des Comparer bei Distinct Funktion
var l = db.DbData.Distinct(new CompanyComparer ());
if (l != null)
{
foreach (DbData Line in l)
{
if (Line == null || Line.Company.Equals(""))
{
continue;
}
TreeViewItem item = new TreeViewItem();
item.Name = Line.Company;
}
}
Bei der foreach bekomme ich dann die Exception, das die Überladung von IEqualityComparer nicht unterstützt wird.
Was mache ich bitte falsch???
MfG
Tonka
Hallo Tonka,
warum benutzt du einen eigenen Comparer???
Sollte doch eigentlich folgendermaßen lösbar sein:
// EDIT: Falsches LINQ-Statement. Richtig siehe weiter unten.
Further reading: 101 Linq Samples - Distinct
Gruß,
dN!3L
deswegen
Fehler 5 "lambda-Ausdruck" kann nicht in den Typ "System.Collections.Generic.IEqualityComparer<LSM.DataBase.DbData>" konvertiert werden, da dies kein Delegattyp ist.
Edit: Oh, muss natürlich heißen:
List<string> companies = db.DbData.Select(d => d.Company).Distinct().ToList();
oder in "SQL-Notation":
List<string> companies =
(from d in db.DbData
select d.Company)
.Distinct()
.ToList()
Gruß,
dN!3L
Super. Jetzt funktionierts. Ich muss mich echt noch genauer mit den Lambda-Befehlen beschäftigen.
Viel viel Dank.
MfG
Tonka