Задать вопрос
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 передается массив слов и каждый параметр должен сам выбрать подходящее ему слово для фильтрации, но все никак не получается это реализовать.
  • Вопрос задан
  • 3428 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Для поиска по массиву - 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));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы