PredicateBuilder не может преобразовать в IQueryable?

у меня есть функция:

private IEnumerable MatchesKeyword(IEnumerable list, String keyword)
{
   ...snip...
}

, которая прямо сейчас выполняет запрос LINQ:

private IEnumerable MatchesKeyword(IEnumerable list, String keyword)
{
   return list.Where(item => item.Name.ContainsText(keyword)
      || item.Description.ContainsText(keyword)
      ...snip...
   );
}

Этот код работает достаточно хорошо.

Но мне нужно преобразовать его , чтобы использовать PredicateBuilder :

private IEnumerable MatchesKeyword(IEnumerable list, String keyword)
{
   var predicate = PredicateBuilder.False();     

   predicate = predicate.Or(item => item.Name.ContainsText(keyword)
         || item.Description.ContainsText(keyword)
         ...snip...
   );

   return list.Where(predicate);
}

Что, как ни странно, не компилируется. Строка с ошибкой:

return list.Where(predicate);

Вы можете выбрать ошибки:

  • Аргумент экземпляра: невозможно преобразовать из 'System.Collections.Generic.IEnumerable' в 'System.Linq.IQueryable'
  • 'System.Collections .Generic.IEnumerable 'не содержит определения для' Where ', и лучшая перегрузка метода расширения' System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable, System.Func) 'имеет некоторые недопустимые аргументы
  • Аргумент 2: невозможно преобразовать из 'System.Linq.Expressions.Expression>' в 'System.Func'

В чем проблема? IEnumerable входит, IEnumerable выходит.

Честно говоря, я прочитал страницу на PredicateBuilder и не понимаю ничего из этого.


Подсказка из , почему мне нужно перейти на PredicateBuilder :

private IEnumerable MatchesKeyword(IEnumerable list, String keyword)
{
   var predicate = PredicateBuilder.False();     

   predicate = predicate.Or(item => item.Name.ContainsText(keyword)
         || item.Description.ContainsText(keyword)
         ...snip...
   );

   DateTime dt = TryStrToDate(keyword);
   if (dt)
       predicate = predicate.Or(item => item.PromotionDate == dt);

   return list.Where(predicate);
}

... не то, что мне нужна причина, проблема, практический пример , или исследовательская попытка задать вопрос.

5
задан Community 23 May 2017 в 10:29
поделиться