2017-12-28 12 views
0

Ich habe eine einfache Einrichtung, wo ich versuche, untergeordnete Entitäten der 2. Ebene basierend auf Elternteil zu bekommen.EF Core: Zurück nur verwandte Datum zwei Ebenen nach unten

Beispiel

public class Country { 
    public string Name {get;set;} 
    public List<State> States {get;set;} 
} 

public class State { 
public string Name {get;set;} 
public Country Country {get;set;} 
public List<City> Cities {get;set;} 
} 

public class City { 
public string Name {get;set;} 
public State State {get;set;} 
} 

Wie rufe ich nur Städte (im Wesentlichen alle anderen Informationen zu ignorieren), die Mutter == "Japan" mit Country.Name haben?

Ich kenne ThenInclude:

dbContext.Countries 
.Include(o => o.States} 
.ThenInclude(x => x.Cities) 
.Where(o => o.Name.Equals("Japan")) 
.ToList(); 

Dann muss ich jede Stadt Liste extact und in neue Liste zu kombinieren, die Liste enthält nur (was ich glaube nicht, ist elegante Weise).

+0

Für diesen Anwendungsfall ist die Anzahl der Städte eine ziemlich endliche Zahl. Ich würde das sowieso auf zwei Tische reduzieren. Der Ländertisch wäre ziemlich klein, 195 Platten. Wenn Sie an Städte mit über 100k Einwohnern festhalten (was für allgemeine Zwecke ziemlich gut ist), wären höchstens 5000 Datensätze für diese Tabelle, die SQL sehr leicht verarbeiten könnte. –

Antwort

0

Den einfachsten Weg gefunden, dies zu tun, ist es von der Rückseite zu betrachten.

await dbContext.Cities 
     .Where(o => o.State.Country.Name.Equals("Japan")) 
     .ToListAsync(); 

Dies wird nur die Liste der Städte zurück, die Großeltern mit dem Namen Japan haben.

+0

Könnte die richtige Idee sein, aber Ihr Code ist nicht korrekt, es kompiliert nicht sogar. –

+0

@GertArnold yea gelöscht, wo durch Zufall die Antwort zu verschönern. Das ist das Werkstück, das ich bekommen habe. – Aeseir

+0

Sie möchten die Frage an erster Stelle aktualisieren. Sie können kaum von Stadtobjekt zu Staat und Land reisen. – cloudikka