Linq查询 – 在另一个列表中列出

我试图在另一个(提供)列表中选择至少有一个城市名称的国家/地区。 很抱歉很难解释,请参阅下面的代码:

当我调用GetListOfCountires时,它应该返回NZ和CN。 我也想用Linq而不是foreach。

private static List Countries = new List(); 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 {city1, city2}}; var country2 = new Country { Name = "AU", Cities = new List { city3, city4 } }; var country3 = new Country { Name = "CN", Cities = new List { city5 } }; Countries.Add(country1); Countries.Add(country2); Countries.Add(country3); List cityNames = new List{"Auckland", "Beijing"}; var countries = GetListOfCountires(cityNames); // this should return NZ, and CN } public class Country { public string Name; public List Cities = new List(); } public class City { public string Name; } public static List GetListOfCountires(List cityNames) { List result = new List(); foreach (var cityName in cityNames) { result.Add(Countries.Where(x=>x.Cities.Contains(cityName))); // error??? } return result; } 

谢谢

在城市名称列表和每个国家/地区的城市列表之间执行交集,仅返回存在此类交叉点的国家/地区。

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

您需要做什么才能获得他们所在城市的所在城市名单

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