2016-08-27 2 views
0

Ich habe 3 Tabellen Kontinent, Land und Stadt. Ich muss ein Objekt vom Typ Kontinent machen, dessen Länder und Länder ihre Städte haben.Linq: Wie man ein Objekt von linq Ergebnis

Kontinent -> Land -> Stadt wie diese. Europa -> Deutschland -> Frankfurt am Main, Berlin, etc ..

Mein Code:

public partial class Continent 
{ 
    public Continent() 
    { 
     this.Countries = new HashSet<Country>(); 
    } 

    public int ContinentId { get; set; } 
    public string ContinentName { get; set; } 

    public virtual ICollection<Country> Countries { get; set; } 
} 

public partial class Country 
{ 
    public Country() 
    { 
     this.Cities = new HashSet<City>(); 
    } 

    public int CountryId { get; set; } 
    public string CountryName { get; set; } 
    public Nullable<int> ContinentId { get; set; } 

    public virtual ICollection<City> Cities { get; set; } 
    public virtual Continent Continent { get; set; } 
} 

public partial class City 
{ 
    public int CityId { get; set; } 
    public string CityName { get; set; } 
    public int CountryId { get; set; } 

    public virtual Country Country { get; set; } 
} 

var Result = (from a in db.Continents 
       join b in db.Countries 
       on a.ContinentId equals b.ContinentId 
       join c in db.Cities on b.CountryId equals c.CountryId 
       where a.ContinentId == 1 
       select new 
        { 
         ContinentName = a.ContinentName, 
         CountryName = b.CountryName, 
         CityName = c.CityName 
        }); 

Dies ist das Ergebnis:

enter image description here

Ich brauche, um ein Objekt zu machen von Geben Sie Kontinent ein, der seine eigenen Grafschaften und Städte enthält

+0

* ich ein Objekt * machen müssen und was ist Ihre Frage? –

Antwort

3

Verwenden Sie den Namespace System.Entity.Data;

var continent = db.Continents 
        .Include(c => c.Countries.Select(cn => cn.Cities)) 
        .FirstOrDefault(c => c.ContinentId == 1); 
+0

Danke :) ... Ich habe genau das getan, was du gesagt hast, aber als ich mir den generierten T-SQL anschaute, habe ich viele Joins und nutzlose Statements gefunden – Lucy

+1

Diese Abfrage wird dem Kontinent mit Länder- und Stadttabellen beitreten. – Developer

+1

Ich würde eine JOIN-Anweisung in einer relationalen Datenbank Abfrage nicht nutzlos aufrufen ... – Tommy

0

Um die Ergebnisse erhalten Sie angezeigt Sie so etwas wie tun würde:

using (var context = new MyContext()) { 
    var data = 
     context 
     .Continents 
     .SelectMany(continent => 
     continent 
     .Countries 
     .SelectMany(country => 
      country 
      .Cities 
      .Select(city => 
       new { 
        ContinentName = continent.Name, 
        CountryName = country.Name, 
        CityName = city.Name 
       } 
      ) 
     ) 
    ).ToList(); 

    // do something with data 
} 
+0

In der '.Select (Stadt =>' Teil, 'Kontinent' und 'Land' sind nicht im Bereich. Dies ist viel einfacher mit der Abfragesyntax. –

+0

@GertArnold Nein, sie sind definitiv im Umfang, wegen der Schließung. Ja das könnte mit der Abfragesyntax viel schöner aussehen. –

+0

@Sahuagin, Danke für Ihre Hilfe :) ... Ich frage nicht nach Frage Ich frage, wie man das Ergebnis abbildet, um ein Objekt des Typs Kontinent zu machen, der seine Landkreise und hat Städte, danke – Lucy