3 Stimmen

Entity Framework - In Unterabfrage einbeziehen?

Ich bin mir nicht sicher, ob diese Frage schon beantwortet wurde. Ich habe mir einige Fragen angesehen, aber ich glaube, sie waren nicht ganz das, wonach ich gesucht habe.

Nehmen wir an, ich habe 3 Tabellen:

Restaurant 1.....M MenuCategory 1.....M MenuItem

Ich habe eine L2E-Abfrage, die in etwa so aussieht:

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);

Das funktioniert bis zu einem gewissen Grad, aber es werden nur die Menükategorien vorgeladen.

Als Workaround bin ich in der Lage, um jede Kategorie zu iterieren und rufen Sie .Load() auf sie, aber dies wird viel mehr, dass in der Theorie sollte ich brauchen, zu schlagen.

Was ich wirklich gerne machen würde, ist etwas wie:

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .Include(r => r.MenuCategory.MenuItems)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);

Aber das ist natürlich nicht möglich, da r.MenuCategory eine Aufzählung ist

ANTWORT 1:

context.Restaurant.Include("MenuCategory.MenuItems");

  • Das funktioniert, ist aber nicht stark typisiert. Ich frage mich, ob jemand in der Lage ist, eine zweite Antwort zu finden, die stark typisiert ist (ich kann diese Frage auf eine andere Frage verschieben, da sie bereits beantwortet wurde, und das gut.

Ich habe diese Frage in eine andere Frage verschoben, da ich es für unfair hielt, einer Antwort, die perfekt ist und genau so funktioniert, wie sie sollte, etwas wegzunehmen:

Entity Framework - In Unterabfrage einbeziehen? - Teil 2

7voto

Jack Woodward Punkte 435

Sie können dafür immer noch die Strongly typed-Version verwenden. Verwenden Sie einfach:

    Restaurant = context.Restaurant
    .Include(r => r.MenuCategory.Select(m => m.MenuItems))
    .FirstOrDefault(r => r.RestaurantId == resaurantId);

2voto

JustLoren Punkte 3204

Dieser Link hier scheint Ihr Problem zu lösen?

var result = context.Restaurant.Include("MenuCategory.MenuItems");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X