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() }