在查询中访问子集合

时间:2010-05-20 11:53:18

标签: c# linq

我使用

填充列表
List<Country> countries = new List<Country> 
{ 
   new Country() 
   {
      CountryID = "US",
      City = new List<City>
      {
         new City()
         {
            CountryID = "US", CityName = "dfdsf", sqkm = 2803
         }
      }
   }
};

等等

如何在以下查询中访问 sqkm

var countryQuery = countries
    .Select(c => new { Id = c.CountryId, Area = c.City.sqkm???});

c.city.sqkm给出了编译错误......如何修改查询

6 个答案:

答案 0 :(得分:2)

如果您想要列出城市列表的第一个城市,请使用c.city.First().sqkm

编辑:在回复您的评论时,如果您希望每个国家/地区定义每平方公里,请使用:

countries.SelectMany(c => c.city)

如果您想要每个国家/地区的所有城市,那么您已经拥有仅c.city的城市,因为它已经是一个列表(应该更改为更清楚的国家/地区)。

EDIT2:countries.SelectMany(c => c.City).Where(city => city.sqkm > 2000);

答案 1 :(得分:2)

正如@Julien所提到的,如果你想要一个,请使用First();如果你想要整个列表,你可以这样做:

c.city.Select(i => i.sqkm) // returns array

答案 2 :(得分:1)

您必须使用下面的索引或使用返回单个记录的扩展方法来指定您想要的列表项。

var countryQuery = countries
.Select(c => new { Id = c.CountryId, Area = c.city[0].sqkm})

答案 3 :(得分:1)

城市是一个列表,因此您应该定义所需的城市。

获得第一个:

var countryQuery = countries
    .Select(c => new { Id = c.CountryId, Area = c.city.First().sqkm});

答案 4 :(得分:1)

如果你想要所有国家所有城市的所有平方公里SelectMany()都是你的朋友。

countries.SelectMany(country => country.Cities).Select(city => city.sqkm);

答案 5 :(得分:0)

var countryQuery = countries
    .Select(c => c.City.Foreach(city => new { Id = c.CountryId, Area = city.sqkm } ));