这似乎是关于我遇到的最普遍的错误 - 关于它的多个SO帖子都指的是不同的问题 - 这里是一个新问题:)
在枚举以下IQueryable
时,我收到上述错误:
N.B。 items
是IQueryable<tblItem>
而keywords
是string
items = items.Where(p => p.heading.ToLower().Contains(keywords) ||
p.description.ToLower().Contains(keywords));
这很令人困惑,因为正如错误所示,当你使用Contains
时它应该可以正常工作 - 有谁知道如何解决这个问题?
答案 0 :(得分:2)
如果keyword是一个支持枚举的集合,那么它应该是另一种方式:
items = items.Where(p => keywords.Contains(p.heading.ToLower()) ||
keywords.Contains(p.description.ToLower()));
答案 1 :(得分:1)
如果项目是IQueryable,则错误可能在那里,而与where语句无关。 你可以在添加where语句之前尝试强制枚举吗?
例如,假设您正在尝试使用数据表加入内存列表,那么在评估或枚举查询时您将收到该错误
List<tblCategory> categories = tblCategory.ToList();
IQueryable<tblItem> items = (from r in tblItem
join c in categories on r.CategoryID equals c.Id select r);
// items = items.Where(p => p.heading.ToLower().Contains(keywords) ||
// p.description.ToLower().Contains(keywords));
var firstMatch = items.FirstOrDefault();
// The error will be generated here even if the where is remmed out
答案 2 :(得分:1)
<强>解决强>
感谢sgmoore的意见 - 它有助于实现这一解决方案:
将IQueryable
列表分配到IEnumerable
列表,在其上运行ToList
,然后在列表中使用我的过滤器效果很好。
IEnumerable<tblItems> temp = items.ToList();
temp = temp.Where(p => p.heading.ToLower().Contains(keywords) ||
p.description.ToLower().Contains(keywords));
items = temp.AsQueryable();