dedlfix: Linq und Count

Beitrag lesen

Tach!

Also zu jedem Lager in der Tabelle Lager muss die Anzahl der Stationen und die Gesamtanzahl der Geräte in diesen Stationen ermittelt werden.

Und das ist gar nicht mal so einfach (oder ich sehe nur Bäume und keinen Wald). Es ist ja noch einfach, für jedes Lager die Anzahl der Geräte zu ermitteln. Das geht mit einfachem Gruppieren, für das man Beispiele findet. Aber von den Stationen muss erst einmal eine Distinct-Menge erzeugt werden. Das ist nach meinem Dafürhalten nicht als LINQ-Syntax verfügbar, nur als Extension-Method. Dafür muss man jedoch eine IEqualityComparer implementierende Klasse erstellen, wenn man keine IEnumerable von den Stationen selbst hat, sondern nur den Namen, wie in deinen Beispieldaten. Und dann kommt noch hinzu, beide Teilprobleme in eine Abfrage zu vereinen.

Ich würde das etwas anders angehen und nicht joinen oder gruppieren. Du hast doch hoffentlich/sicherlich ein EntityFramework-Model von deiner Datenhaltung erstellt. Dann gäbe es eine Klasse, die ein Lager repräsentiert, und die hat eine Listen-Eigenschaft für all ihre Geräte. Wenn sie jetzt noch eine für alle Stationen hätte, wäre schon alles gut und mit zwei Count()s pro Lager hättest du dein Ergebnis. Ungefähr so:

var result = from lager in Lagers.Include("Stationen").Include("Geräte")
  select new {
    Lager => lager.Name,
    Stationen => lager.Stationen.Distinct().Count();
    Geräte => lager.Geräte.Count();
  };

Ohne IEnumerable für die Stationen braucht es für das Distinct() die erwähnte Klasse.

dedlfix.