using System.Collections.Generic;
public string Name { get; set; }
public List<City> Cities { get; set; }
public string Name { get; set; }
public static void Main()
var items = new List<Country>()
new Country() { Name = "Austria", Cities = new List<City>() { new City() { Name = "Vienna" }, new City() { Name = "Linz" } } },
new Country() { Name = "Australia", Cities = new List<City>() { new City() { Name = "Sydney" }, new City() { Name = "Melbourne" } } },
new Country() { Name = "USA", Cities = new List<City>() { new City() { Name = "Austin" }, new City() { Name = "New York" } } }
foreach (var country in items)
Console.WriteLine(country.Name);
foreach (var city in country.Cities)
Console.WriteLine(" " + city.Name);
Console.WriteLine("\r\n****FILTERED:\r\n");
var filteredItems = items.Where(i => i.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) ||
i.Cities.Any(c => c.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase)))
.Select(i => new Country()
Cities = i.Cities.Where(c => c.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) ||
i.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase)).ToList()
foreach (var country in filteredItems)
Console.WriteLine(country.Name);
foreach (var city in country.Cities)
Console.WriteLine(" " + city.Name);