dedlfix: Linq und Include

Beitrag lesen

Tach!

ich komme einfach nicht dahinter, wie Include bei Linq funktioniert.

Include ist kein LINQ-Feature und hat keine Entsprechung in der LINQ-Syntax (from f in foo where... select f). Die Funktion gibt es aber zum Beispiel im Entity Framework. Dort kannst du es über funktionsbasierte Abfrageweise (context.foo.Include(...).Where(...)) aufrufen.

Du hast eine Beziehung zwischen zwei Tabellen und willst hauptsächlich die Daten einer Tabelle und über die Beziehung auch auf die Daten der anderen Tabelle zugreifen. Das ist das hauptsächliche Einsatzszenario. Include() sorgt lediglich dafür, dass im Hintergrund die Daten der anderen Tabelle gleich mitgeladen werden. Ob dabei ein Join ausgeführt wird, interessiert an der Stelle aus der Sicht des .NET-Programmierers nicht. Eine zweite Option wäre LazyLoad, dann werden die Daten erst beim Zugriff ermittelt, und dann aber auch in Einzelabfrage. Das lohnt nur bei wenigen Zugriffen. Wenn bei allen Datensätzen die Beziehungsdaten benötigt werden, nimmst du das Include() und gibst einfach nur den Tabellennamen an. Was dann intern wie gejoint werden muss, weiß das EF von selbst anhand der vorher festgelegten (oder aus den Fremdschlüsseln der Datenbank ermittelten) Beziehungen. In neueren Versionen muss man für den Tabellennamen allerdings keinen String mehr nehmen, sondern kann einen Lambda-Ausdruck verwenden. Das hat gegenüber dem String den Vorteil, dass der Compiler gleich mitkontrolliert, dass es den Tabellennamen auch gibt.

dedlfix.