dedlfix: LINQ-Anweisung

Beitrag lesen

Tach!

Wenn es so ist, dann bitte erkläre deine Lösung etwas näher, allerdings wenn du irgendwann mal Zeit und lust dazu hast.

Die erste zu klärende Frage ist, welchen ORM du verwendest, um von Datenbank-Tabellen (solch meintest du doch?) zu Klassen zu kommen. Ist es das Entity Framework oder das alte LINQ to SQL oder OpenAccess von Telerik oder ...? All diese Tools, wenn sie die Verknüpfung zwischen den Tabellen erkennen (konfigurierte Relationen), setzen solche Verbindungen als extra Eigenschaft von einem von IEnumeration abgeleiteten Typ in die erzeugten Klassen ein. Über diese Navigation Properties genannte Eigenschaften kann man auf die zugehörigen Datensätze der anderen Tabellen zugreifen, und sie so auch einfach zählen. Ein Gruppieren ist nicht notwendig (in dem Fall jedenfalls), das erledigt bei Bedarf der ORM.

Wenn man Daten abbildet, so macht man das in den RDBMS-Tabellen über einen Schlüsselwert, der auf einen anderen Datensatz (einer anderen Tabelle) verweist. In OOP hingegen erweitert man die Klassen neben den eigentlichen Datenfeldern um eine Eigenschaft, die eine Referenz auf das Objekt einer anderen Klasse enthält. Oder wenn es mehrere sind, dann über eine Collection oder ähnliches. Die Beziehungen sind in OOP also direkt vorhanden. Man kann sich an ihnen auch entlanghangeln, wenn man auf die Eigenschaften der referenzierten Objekte zugreifen möchte. Im RDBMS muss man stattdessen joinen. - Nun ist es aber nicht so, dass sämtliche Tabelleninhalte in den Speicher gelesen werden und ein unter Umständen riesiges Beziehungsgeflecht über Referenzen aufgebaut wird. Der ORM sorgt dafür, dass nur genau zu den gewünschten Daten die Objekte erstellt werden. Auch werden die in Beziehung stehenden Objekte erst beim eigentlichen Zugriff angelegt (Lazy Load), wenn man nicht vorher ein explizites Mitladen verlangt. All das macht dir das Leben einfacher, weil du in objektorientiert denken und arbeiten kannst.

Mit dem Wissen sollte es eigentlich einfach sein, meine Lösung zu verstehen. Ich gehe über die Navigation Properties und zähle einfach, wieviele Objekte in der Collection drin sind. Das Zählen der C-Datensätze/-Objekte ist ein wenig aufwendiger, weil dazu eine Summe über alle gezählten C-Objekte gebildet werden muss, die in Beziehung zu den B-Objekten des jeweiligen A-Objekts stehen.

dedlfix.