Как реализовать поиск сразу по нескольким полям

У меня на странице поиска есть 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 уже отфильтрован
→ Ссылка