Linq query - list in another list

I am trying to select countries with the name of at least one of their cities in a different (supplied) list. Sorry it's hard to explain, please see the code below:

When I call GetListOfCountires, it should return NZ and CN. I also want to use Linq instead of foreach.

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

thanks

+5
source share
2 answers

Perform the intersection between the list of city names and the list of each country in the cities, returning only those countries where such an intersection exists.

 var countries = Countries.Where(x => x.Cities.Intersect(cityNames).Any()); 
+7
source

What do you need to get countries in which Any their cities is on the cityNames list

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

All Articles