2017-12-28 20 views
0

私は、親エンティティに基づいて第2レベルの子エンティティを取得しようとしています。EFコア:関連する日付が2レベル下に戻る

例Country.Nameを持つ親==「日本」を持っている私は(基本的に他のすべての情報を無視して)のみの都市を取得するにはどうすればよい

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;} 
} 

私はThenIncludeの知っている:

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

それから私は、各都市のリストをextactと(私はエレガントな方法だとは思わないもの)のみのリストが含まれている新しいリストにそれを組み合わせる必要があります。

+0

このケースでは、都市の数はかなり有限の数です。とにかくこれを2つのテーブルに平らにします。 Countriesテーブルは、195レコードと非常に小さくなります。あなたが100万人以上の住民(一般的な目的にはかなり良い都市)にぶつかると、そのテーブルのためにSQLが非常に簡単に処理できる5000レコードになります。 –

答えて

0

これを行うための最も簡単な方法は、逆に見ることです。

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

これは、名前が日本の祖父母を持つ都市のリストのみを返します。

+0

正しいアイデアかもしれないが、コードが正しくない、コンパイルされていない。 –

+0

@GertArnoldええ、答えを見分けるときに偶然どこを削除しましたか。これは私が持っている作品です。 – Aeseir

+0

質問を最初に更新したい。 CityオブジェクトからStateおよびCountryに移動することはほとんどできません。 – cloudikka

関連する問題