dedlfix: LINQ-Anweisung

Beitrag lesen

Tach!

ich brauche wieder mal eure Hilfe bei einer LINQ-Abfrage.
Ich habe da 3 Tabellen wie folgt.

Tabellen haben aber nicht direkt was mit LINQ zu tun. Die Tabellen werden doch irgendwie mit einem ORM in ein Klassen-Layout umgesetzt. Das heißt, dass zum Beispiel die Klasse, die die A-Elemente repräsentiert, eine Eigenschaft vom Typ ICollection<B> besitzt. Über diese kann man dann alle Elemente aus B ansprechen, die zur ID des A-Elements passen. Darauf kann man dann auch Count() und ähnliches ansetzen.

Ich brauche nun diese Anzeige:
A_1 hat 3XB und 6XC (BID -> 1, 2, 3 und CID -> 1, 2, 3, 4, 5, 6)

Und hier musste ich raten, was die Abkürzungen sein sollen. A_1 ist das A-Element mit der ID 1. Was 3XB ist, wäre mit 3 x B besser zur Geltung gekommen. Am besten wäre eine Beschreibung in natürlicher Sprache gewesen.

Ich habe bereits versucht über diese LINQ-Anweisung das Ergebnis zu bekommen, es gelingt mir aber nicht:

Das Ergebnis ist die eine Sache. Du weißt doch aber (hoffentlich) auch, was da nach welchen Regeln zusammengezählt werden soll. Wenn du das in Worte hättest gefasst, wäre mir als Helfer auch mehr geholfen. Es kann nämlich sein, dass dein Algorithmus oder Ergebnis schon Fehler enthält oder irgendeine Nebenbedingung nicht zu sehen ist, weil sie in dem Fall grad nicht vorkommt.

Hat jemand eventuell eine Idee, wie ich das Ergebnis wie oben beschreiebn erhalten kann?

Unter der eingangs erwähnten Bedingung der Navigation Properties (die ICollection-Dinger) komme ich auf diese einfache Lösung:

var x = As.Select(a => new {
    a,
    bCount = a.Bs.Count(),
    cCount = a.Bs.Sum(b => b.Cs.Count())
  });

x ist eine Enumeration eines anonymen Typs, welcher in den Eigenschaften bCount und cCount die gewünschten Ergebnisse enthält zum jeweilgen A-Element (in a enthalten). As ist ein IEnumerable<A> oder ähnliches (z.B. DbSet<A>) und a.Bs und b.Cs sind die Navigation Properties.

dedlfix.