我有一个功能:
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...
);
}
此代码运行良好。
但是i need to convert it要使用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);
您可以选择错误:
有什么问题? IEnumerable
进入,IEnumerable
出来。
我会说实话,我读the page on PredicateBuilder
而且我不理解 任何 。
PredicateBuilder
......并不是说我需要一个理由,问题,实际例子或研究工作来提问。
答案 0 :(得分:10)
PredicateBuilder需要IQueryable<T>
才能发挥其魔力。只需将示例中的最后一行更改为
return list.AsQueryable().Where(predicate);
让它发挥作用。