Linq:如何从linq结果中创建一个对象

时间:2016-08-27 01:02:50

标签: c# entity-framework linq

我有三张桌子大陆,乡村和城市。我需要制作一个大陆类型的对象,其国家和国家都有自己的城市。

大陆 - >国家/地区 - >像这样的城市。欧洲 - >德国 - >法兰克福,柏林等。

我的代码:

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

结果如下:

enter image description here

我需要创建一个类型为Continent的对象,其中包含自己的县和城市

2 个答案:

答案 0 :(得分:3)

使用命名空间System.Entity.Data;

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

答案 1 :(得分:0)

要获得您指出的结果,您可以执行以下操作:

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
}