我有一个功能:
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...
);
}
这段代码运行良好。
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”不包含“Where”的定义,并且最佳扩展方法重载“System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func)”有一些无效参数
- 参数 2:无法从 'System.Linq.Expressions.Expression>' 转换为 'System.Func'
有什么问题?IEnumerable
进去,IEnumerable
出来。
老实说,我阅读了该页面,PredicateBuilder
但我一点也不明白。
为什么我需要更改为的提示是: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);
}
...并不是说我需要一个理由、问题、实际例子或研究工作来提出问题。