У меня есть функция:
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
...snip...
}
, которая сейчас выполняет запрос LINQ:
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
return list.Where(item => item.Name.ContainsText(keyword)
|| item.Description.ContainsText(keyword)
...snip...
);
}
Этот код работает достаточно хорошо.
Но мне нужно конвертировать , чтобы использовать PredicateBuilder
:
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
var predicate = PredicateBuilder.False<Promotion>();
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 'не содержит определения «Где» и наилучшей перегрузки метода расширения «System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable, System.Func) 'содержит недопустимые аргументы
- Аргумент 2: невозможно преобразовать из' System.Linq.Expressions.Expression> 'в' System.Func '
Что такоепроблема?IEnumerable
входит, IEnumerable
выходит.
Я буду честен, я прочитал страницу PredicateBuilder
и я не понимаю любой этого.
A подсказка из почему мне нужно изменить на PredicateBuilder
:
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
var predicate = PredicateBuilder.False<Promotion>();
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);
}
... не то чтобы мне нужен был повод, проблема, практический пример или исследовательская работа, чтобы задать вопрос.