Hallo ich bin noch ganz am Anfang mit LINQ und habe ein (sicherlich einfaches) Problem. Ich habe folgende Struktur:
//hier ist die Liste die bearbeitet werden soll
List<Artikel> ArtikelListe = new List<Artikel>();
//Hier die Definitionen der Klassen
class Artikel
{
string Name;
...
List<Lieferant> Lieferantenliste = new List<Lieferant>();
}
class Lieferant
{
string Name;
sring ID;
}
Jetzt würde ich gerne mit LINQ mir eine Liste erzeugen lassen, in der alle Artikel vorkommen deren Lieferant z.B. Test1 lautet (also z.B. Lieferant.Name == "Test1")
var query = from article in articles //loop über alle artikel
from lieferant in articles.GetLieferanten //(also die Property für die Liste der Lieferanten - loop über alle Lieferant)
where lieferant.Name == "Foo" // (Property für name) where bedingung
select article; //den artikel selecten
oder eben direkt Lambda, ist kürzer aber weniger lesbar
var query = articles.Where(a=> a.Lieferanten.Any(l=>l.Name == "Foo"));
Wers noch kürzer liebt, kann mit LAMBDA Expressions dahinter 🙂
Articles.GetLieferanten().Where(a => a.Name == "Foo").Select(a => a).ToList();
Manchmal leserlicher als eine LINQ-Query, aber macht (hoffentlich) dasselbe.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Lol, den Gedanken hatte ich auch - und diesmal war ich schneller 😉
Und da sieht man mal wieder, dass viele Wege nach Rom führen...
Salute zusammen
Das ".Select(a => a)" ist überflüssig, aber der Kompiler generiert das, wenn keine Projektion vorgenommen wurde.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Salute zusammen
Das ".Select(a => a)" ist überflüssig, aber der Kompiler generiert das, wenn keine Projektion vorgenommen wurde.
Gruss Peter
Ich wusste dass noch einer der Korifäen was einzuwenden hat 😁
Na ja, angenommen er möchte nur ein Property in einer Liste haben, dann ist es legitim
.Select(a => a.Artikelname).ToList<string>()
zu verwenden.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Salute schaedld
Ja klar, dann ist es ja auch eine Projektion 😃
BTW: Dieses Jahr komme ich nicht an die TechDays...
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
BTW: Dieses Jahr komme ich nicht an die TechDays...
Gruss Peter
Welchen Experten soll man dann fragen? Schade, schade... 8o
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Hallo,
Vielen Dank für die Antworten klappt prima. Bitte aber noch eine kleine Hilfe....
Gibt es auch eine Anweisung die mir eine Liste aller Lieferanten die (über alle Artikel) vorkommen ausgibt?
Eventuell ein guter Einstiegspunkt: LINQ Sample --> vgl. Join
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Danke für den Link, leider sehe ich im Moment "vor lauter Bäume den Wald nicht mehr". Muss ich das mit der Group-Anweisung machen???
Ich denke was dir fehlt ist distinct.
.Select(p => p.GetLieferanten()).Distinct().ToList<string>()
Ich denke was dir fehlt ist distinct.
Hm, da muss man aber aufpassen, da "Lieferanten" ja sicherlich Referenztypen sind. Die normale Equals-Implementierung auf Referenzgleichheit prüft, macht Distinct manchmal nicht das, was man erwarten würde.
Gruß,
dN!3L
Danke für Eure Hilfe,
ich habe mir so beholfen (bisher funktioniert es auch so):
var list = from c in articles
from d in articles.GetLieferanten
group d by d.Lieferant into lieferantList
orderby lieferantList.Count() descending
select lieferantList;
Gibt es da was auszusetzen?