2017-05-24 4 views
1

私は、あなたが期待する通常の関係を持つ3つのテーブルを持っています。場所は地区に属し、地区は地域に属します。私はこれらの3つのテーブルをEFに持ち込み、関係はそこにあります(RegionテーブルにはDistrictsテーブルのプロパティがあります)。EFから位置階層を返します。

関係がすでに存在し、私は、私は各テーブルの外にしたいカップルのフィールドのすべての3人の関係を返す簡単なクエリを探していますされているので、私は自分のWeb APIからそれを返すことができます考える:

[{ 
    "region": "0", 
    "name": "Test" 
    [{ 
     "district": "0" 
     "name": "Flower" 
     [{ 
      "location": "0", 
      "name": "What" 
     }] 
    }] 
}, 
{ 
    ...etc 
}] 

それぞれに多くのフィールドがあるので、これらのフィールドを持つ自分のテーブルにリレーションシップを構築する必要がありますか、EFテーブルとの関係を維持しながら各テーブルから必要なフィールドのみを選択できますかクエリ?理想的には、私はより自然なそれを見つけるように、クエリの構文でこれを行うにしたいと思います。

+0

をちょうど必要なフィールドを持つ匿名/特定の種類の予測( 'SELECT')でクエリを作成します。クエリ内では、エンティティ*ナビゲーションプロパティ*を使用することができます。 –

答えて

1

必要なフィールドを選択することをお勧めします。

同様:

var results = dbContext.Regions.Select(r => new RegionModel{ 
    Id = r.Id, 
    Name = r.Name 
    Districts = r.Districts.Select(d => new DistrictModel { 
    ....... 
    }) 
}); 

私はRegionModelとDistrictModelあなたはまたにAutoMapperを使用することができます

上位抽象化層(サービス、コントローラなど)に使用されるいくつかのデータ転送オブジェクトがあると仮定QueryableExtensionsを使用してエンティティをDTOに変換すると、設定に基づいて自動的に選択が行われます。

UPD:

あなたにもLINQクエリ構文を使用することができます。

var results = from r in dbContext.Regions select new RegionModel { 
    Id = r.Id, 
    Name = r.Name 
    Districts = from d in r.Districts select new DistrictModel { 
    ... 
    } 
}); 
+0

メソッドの構文と内側のリストのクエリ構文(例ではDistricts)を使用する必要がありますか? – user441521

+0

ここで必要な構文を使用できます。 –

+0

varの結果= dbContext.Regionsからの新しい領域モデル{ Id = r.Id、 名前= r.Name 地区は= rdから選択します。地区は新しいDistrictModel {}を選択します }); –

関連する問題