Мне нужно запросить список с 3 различными строковыми входами. Входные строки имеют вид string1|string2|string3
. Поэтому мне нужно разделить их split('|')
раньше.
Теперь мне нужно запросить список (Locations<Location>()
), сравнивая значения из 3 различных массивов (country[]
, state[]
, city[]
), полученных при разбиении строк.
У меня есть запрос linq для каждого следующим образом
Пример: для соответствия стране
IEumerable<Location> loc = Locations.Where(lc=> Country.Any(entry => lc.CountryName. StartsWith(entry,StringComparison.OrdinalIgnoreCase)));
Мне нужно пропустить проверку состояния, если строка состояния пуста. Поэтому мое решение было:
Запрос страны в первую очередь. если строка пуста, вернуть исходный список ввода.
Запрос состояний по результату, полученному из шага выше. если строка пуста, вернуть исходный список ввода.
Запрос города на результат, полученный из шага выше. если строка пуста, вернуть исходный список ввода.
Есть ли способ объединить все 3 в один запрос LINQ, учитывая проблему выше ?. Надеюсь, я был чист.
Текущий код с ожидаемым выводом
private IList<Location> FilterLocation(
IList<Location> locations, LocationRequest Request)
{
locations = FindCountry(locations, Request.Countries);
locations = FindStatenames(locations, Request.States);
locations =FindCitynames(locations, Request.Cities);
return locations;
}
private IList<Location> FindCountry(
IList<Location> locations, string Countrynames)
{
if (!string.IsNullOrEmpty(Countrynames))
{
string[] Country= Countrynames.Split('|');
IEnumerable<Study> result = locations.Where(lc=> Country.Any(entry => lc.CountryName.StartsWith(entry,StringComparison.OrdinalIgnoreCase)));
return result.ToList();
}
return locations;
}
private IList<Location> FindStatenames(
IList<Location> locations, string Statenames)
{
if (!string.IsNullOrEmpty(Statenames))
{
string[] States =Statenames.Split('|');
IEnumerable<Study> result = locations.Where(lc=> States.Any(entry => lc.StateName.StartsWith(entry,StringComparison.OrdinalIgnoreCase)));
return result.ToList();
}
return locations;
}
private IList<Location> FindCitynames(
IList<Location> locations, string Citynames)
{
if (!string.IsNullOrEmpty(Citynames))
{
string[] Cities = Citynames.Split('|');
IEnumerable<Study> result = locations.Where(lc=> Cities.Any(entry => lc.CityName.StartsWith(entry,StringComparison.OrdinalIgnoreCase)));
return result.ToList();
}
return locations;
}
Пример вывода
First Sample
Input
Countrynames = "Country1|Country2|Country3"
Statenames = "State1|State2|State3"
Citynames = "City1|City2|City3"
Output
Match Location with Country2,State1,City3
Second Sample
Input
Countrynames = null
Statenames = "State1|State2|State3"
Citynames = "City1|City2|City3"
Output
Match Location with Country2,State1,City3
Match Location with Country10,State1,City3
Match Location with Country15,State1,City3
Match Location with Country8,State1,City3
Другими словами
if Countrynames = null Не включать в поиск.
if Statenames = null Не включать в поиск.
if Citynames = null Не включать в поиск.
Заранее спасибо.