Tach!
Ich habe versucht, die gejointe Anweisung mit Include umzuschreiben. Das Problem dabei ist, dass z.B. Tabelle A keine Ahnung von der Tabelle C hat und kennt nur Tabelle B. B kennt aber A und C.
Soweit kein Problem, man kann/muss sich dann von A über B nach C durchhangeln, über die Navigationseigenschaften.
Wenn ich nun eine Anweisung schreiben möchte, in der ich die Daten von B und C über A mitgeliefert bekommen will, gelingt mir nicht. Muss man bei einer includierten Anweisung nicht alle Eigenschften der 3 Tabellen im Eingenschaftenfensterchen (intellisense) zu gesicht bekommen?
Es werden dabei keine Klassen erweitert. Du greifst weiterhin über die Navigationseigenschaften auf die verbundenen Objekte zu.
Wie kann ich sonst z.B. sagen "Alle Daten aus A wenn ID bei B gleich BID in C ist und C.Name = "meinName" ist, wenn ich nicht direkt an C daran komme? Ich habe folgendes versucht:
var lingQuery = from aa in A.Include(a => a.B).Include(b => b.B.Select(c => c.C))
Daraus entnehme ich, dass zu einem A mehrere B existieren können, und jedes B mindestens ein C haben kann, oder auch mehrere, das lässt sich nicht genau aus dem Beispiel erkennen. "Falsch" ist nur das kleine b, denn der Parameter ist vom Typ A, und auch c, denn das ist B. Halt mal die Maus drauf. Du kannst ja deine Variablen benennen wie du möchtest, aber etwas irreführend ist es im Moment (selbst wenn es nur Beispielnamen sind).
> ich erwarte an dieser Stelle, dass ich so etwas schreiben kann:
>
> ~~~
> where aa.ID (in B) == aa.BID (in C)
>
Dann hast du falsche Erwartungen. In deinem Fall ist, gemäß deines obigen Selects im Include, in aa.B das B eine Navigationseigenschaft vom ICollection<B>. Du kannst nun nicht direkt auf C zugreifen, sondern musst erst ein bestimmtes Item in der ICollection wählen und dann kannst du auf dessen C zugreifen.
dedlfix.