Каков синтаксис фильтра LINQ для списка <string>? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть C# программа, использующая EF Core.

Я получаю свои записи так:

List<MyEntity> candidateRecords = await myFilters.ToListAsync();

Я строю свои фильтры так:

IQueryable<MyEntity> myFilters = from m in context.MyEntity
                                 select m;
if (!string.IsNullOrEmpty(criterion1))
   myFilters = myFilters.Where(s => s.SomeColumn.Contains(criterion1));
if (!string.IsNullOrEmpty(criterion2))
   myFilters = myFilters.Where(s => s.SomeColumn.Contains(criterion2));
   ...

Это все работает. Я могу выбрать любую комбинацию критериев для отдельных значений, например, criterion s.Color = "Blue".

Но каков синтаксис для фильтрации по всем совпадениям LIST ?

ПРИМЕР ( не работает правильно):

  List<string> selectedNames = new List<string>() {"Huey", "Dewey", "Louie"}:
  if (!string.IsNullOrEmpty(criterionX)) 
  {
       myFilters = myFilters.Where(
         record => selectedNames.Contains(record.Name));
       ...

Допустим, существует несколько записей для всех трех имен. Приведенный выше пример вернет только записи для "Huey"; никакие записи не возвращаются для "Dewey" или "Lou ie".

Вопрос:

Какой правильный синтаксис LINQ для возврата ALL соответствующие записи для КАЖДОГО имени в списке?

1 Ответ

3 голосов
/ 11 марта 2020

Насколько я понимаю, вы хотите получить что-то эквивалентное оригиналу

 myFilters = myFilters.Where(s => s.SomeColumn.Contains(criterion1));

просто со списком критериев.

Тогда это должно быть что-то вроде этого

myFilters = myFilters
    .Where(record => 
        selectedNames
            .Any(selectedName => 
                 record.Name.Contains(selectedName)));

с методом расширения Any .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...