Tach!
Vorab, ich weiß nicht, wie dein Datenmodell in Bezug auf die Art der Beziehung zwischen den Tabellen A, B und C aussieht, also 1:1, 1:n oder m:n. Ich habe lediglich aus deinem Code geschlussfolgert. Aber wenn dein Code nicht richtig ist, ist auch meine Schlussfolgerung hinfällig. Das Include mit dem Select muss man nur bei 1:n nehmen, bei 1:1 gehts ja direkt (a.B.C, oder b.B.C in deinem Fall mit den "falschen" Variablennamen).
Wie meinst du mit "ein bestimmtes Item in der ICollection"? Wie komme ich denn daran?
Wenn du zwischen B und C eine 1:n-Beziehung hast, ist über die Navigationseigenschaft logischerweise eine Ansammlung aller n C-Datensätze zu erreichen. Und von einer solchen ICollection spricht man einzelne Daten über ein foreach oder einen Indexzugriff oder andere Funktionen an (First(), Last(), FirstOrDefault(), ...)
Im Where-Klausel komme ich demzufolge nur an "aa" daran. über "aa." bekomme ich, außer der Eingenschaften "EntityKey" und "EntityState", nur die Eigenschften von aa.
An die Eigenschaften von B solltest du über die Navigationseigenschaft von A, die auf B verweist, zugreifen können. Die müssen im Datenmodel (*.edmx) angezeigt werden, dazu die Beziehungslinien. Wenn du die nicht hast, fehlt dir die Möglichkeit des Durchgreifens, da hilft dann auch kein Include() sondern nur ein Zu-Fuß-Join.
Die Datenmenge von C einzuschränken, wenn es eine 1:n-Beziehung ist, geht vermutlich nur, wenn du an vor das .Select() in deinem Include noch ein .Where() hinzufügst. Dann, so nehme ich an, kannst du aber keine Werte aus A als Bedingung angeben. Wenn dein Ziel ist, eine eingeschränkte Datenmenge von C mit A zu verbinden, dann ist Include nicht der richtige Weg, dann musst du Joinen. Das geht auch über LINQ-Syntax.
When ich wieder alle Tabellennamen angeben muss, um an deren Eigeanschften daran kommen zu können, frage ich mich, warum dann Include? Was bewirkt das?
Include bewirkt beim Ausführen der Query ein Mitladen der Daten, auf die über die Navigationseigenschaften zur jeweiligen Tabelle zugegriffen werden soll. Das Gegenteil ist Lazy Load, dass erst beim Zugriff die Daten geladen werden. Include ist kein Ersatz für Join, wenn dir die Navigationseigenschaften fehlen.
dedlfix.