GetB
@GetB

Как бы вы реализовали фильтрацию по нескольким полям в Entity Framework?

Имеется фильтр такого плана:
return DbSet.Where(u => u.FirstName.IndexOf(search) > -1
                                    || u.LastName.IndexOf(search) > -1
                                    || u.UserName.IndexOf(search) > -1
                                    || u.Email.IndexOf(search) > -1);

Используя введенное слово search фильтруются данные.
Сейчас я хочу переделать алгоритм таким образом, чтобы можно было ввести два слова (Email LastName) и данные отфильтровались уже на основе двух параметров. И чем больше параметров, тем точнее фильтрация, т.е. в итоге может остаться в итоговой таблице одна запись удовлетворяющая условию.

Была мысль сделать так:
return DbSet.Where(u => u.FirstName.IndexOf("WORDS ARRAY")) > -1
                                        || u.LastName.IndexOf("WORDS ARRAY") > -1
                                        || u.UserName.IndexOf("WORDS ARRAY") > -1
                                        || u.Email.IndexOf("WORDS ARRAY") > -1);

т.е. вместо WORD ARRAY передается массив слов и каждый параметр должен сам выбрать подходящее ему слово для фильтрации, но все никак не получается это реализовать.
  • Вопрос задан
  • 3270 просмотров
Пригласить эксперта
Ответы на вопрос 1
Для поиска по массиву - Array.IndexOf. Будет работать в LINQ наверняка не скажу, сам бы так поступать с данными из базы не стал. SQL - наше все :)
string[] arr = {"слово 1", "слово 2"};
return DbSet.Where(u => Array.IndexOf(arr, u.FirstName) != -1);


Еще вариант, более плохой, но с возможность игнорировать регистр:
string[] arr = {"слово 1", "слово 2"};
return DbSet.Where(u => arr.Any(itm=> itm == u.FirstName));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АЛМАЗ Москва
от 90 000 до 180 000 ₽
Action tech Москва
от 150 000 до 250 000 ₽
Itiviti Санкт-Петербург
До 230 000 ₽
17 июн. 2021, в 00:44
40000 руб./за проект
17 июн. 2021, в 00:12
100000 руб./за проект
17 июн. 2021, в 00:05
2000 руб./за проект