Как реализовать поиск сразу по нескольким полям
У меня на странице поиска есть 3 поля: name, age, country. Без кнопки «поиск», фильтрация списка должна происходить сразу по этим 3 полям независимо друг от друга. Например, если пользователь в поле name введет «Вася», то в списке фильтрация должна быть только по полю name и выведет всех Вась. А если ввести name=Вася age=18, то фильтровать уже должен по двум полям. Как реализовать такое с помощью linq? Соединять все в большое выражение Where (а если некоторые значения пользователь не введет)?
Ответы (1 шт):
Автор решения: iiKuzmychov
→ Ссылка
Просто фильтруйте постепенно:
IEnumerable<Human> result = people; // исходные данные
if (!string.IsNullOrWhiteSpace(nameFilter)) // nameFilter - фильтр имя
result = result.Where(human => human.Name.StartsWith(nameFilter));
if (ageFilter is not null) // ageFilter - фильтр возраста
result = result.Where(human => human.Age == age);
if (!string.IsNullOrWhiteSpace(countryFilter)) // countryFilter - фильтр страны
result = result.Where(human => human.Country.StartsWith(countryFilter));
// на этом этапе result уже отфильтрован