2010-05-20 4 views
0

Je peuplant une liste à l'aidecollection enfant dans la requête

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

et ainsi de suite

Comment accéder dans la sqkm requête suivante?

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

c.city.sqkm donne erreur de compilation ... comment modifier une requête

+0

Quel est le message d'erreur? –

Répondre

2

Comme mentionné par @Julien, si vous en voulez un, utilisez First(); si vous voulez la liste entière, vous pouvez faire:

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

Si vous voulez la première ville de votre liste des villes, utilisez c.city.First().sqkm

EDIT: en réponse à votre commentaire, si vous veulent tous les kilomètres carrés définis dans tous les pays alors utilisez:

countries.SelectMany(c => c.city) 

Si vous voulez que toutes les villes par pays, vous avez déjà avec seulement c.city puisque c'est déjà une liste (qui devrait être renommée Pays pour être plus clair).

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

+0

non je veux lister tous les sqkm par pays – Gokul

1

Vous devez spécifier quel élément liste que vous souhaitez soit à l'aide d'un index comme ci-dessous, ou en utilisant une méthode d'extension qui retourne un seul enregistrement.

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

La ville est une liste, vous devez donc définir la ville que vous voulez.

Pour obtenir la première:

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

si vous voulez que tous les kilomètres carrés de toutes les villes dans tous contries SelectMany() est votre ami.

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