2015-05-27 40 views
5

Ich versuche, Länder mit mindestens einem Namen ihrer Städte in einer anderen (gelieferten) Liste auszuwählen. Sorry schwer zu erklären, bitte siehe Code unten:Linq Abfrage - Liste in einer anderen Liste

Wenn ich GetListOfCountires aufrufen, sollte es NZ und CN zurückgeben. Auch ich möchte Linq anstelle von foreach verwenden.

private static List<Country> Countries = new List<Country>(); 
    private static void Main() 
    { 
     var city1 = new City {Name = "Auckland"}; 
     var city2 = new City { Name = "Wellington" }; 
     var city3 = new City { Name = "Perth" }; 
     var city4 = new City { Name = "Sydney" }; 
     var city5 = new City { Name = "Beijing" }; 
     var country1 = new Country {Name = "NZ", Cities = new List<City> {city1, city2}}; 
     var country2 = new Country { Name = "AU", Cities = new List<City> { city3, city4 } }; 
     var country3 = new Country { Name = "CN", Cities = new List<City> { city5 } }; 
     Countries.Add(country1); 
     Countries.Add(country2); 
     Countries.Add(country3); 
     List<String> cityNames = new List<string>{"Auckland", "Beijing"}; 
     var countries = GetListOfCountires(cityNames); // this should return NZ, and CN 
    } 

    public class Country 
    { 
     public string Name; 
     public List<City> Cities = new List<City>(); 
    } 

    public class City 
    { 
     public string Name; 
    } 

    public static List<Country> GetListOfCountires(List<String> cityNames) 
    { 
     List<Country> result = new List<Country>(); 
     foreach (var cityName in cityNames) 
     { 
      result.Add(Countries.Where(x=>x.Cities.Contains(cityName))); // error??? 
     } 
     return result; 
    } 

Dank

Antwort

7

eine Kreuzung zwischen der Liste von Städtenamen Führen und jeder Liste des Landes der Städte, nur die Länder zurückkehrt, wo eine solche Kreuzung existiert.

var countries = Countries.Where(x => x.Cities.Intersect(cityNames).Any()); 
5

Was Sie brauchen, um die Länder zu tun bekommen, wo Any ihrer Städte in der cityNames Liste ist

public static List<Country> GetListOfCountires(List<String> cityNames) 
{ 
    return Countries 
      .Where(country => country.Cities.Any(city => cityNames.Contains(city.Name)) 
      .ToList() 

} 
Verwandte Themen