4

这似乎是关于我遇到的最普遍的错误 - 多个关于它的 SO 帖子都指的是不同的问题 - 这是一个新的:)

IQueryable枚举以下内容时出现上述错误:

NBitems是一个IQueryable<tblItem>并且keywords是一个string

items = items.Where(p => p.heading.ToLower().Contains(keywords) || 
                         p.description.ToLower().Contains(keywords));

这令人困惑,因为正如错误所暗示的那样,当您使用Contains- 时它应该可以正常工作 - 有谁知道如何解决这个问题?

4

3 回答 3

2

如果关键字是一个支持枚举的集合,那么它应该是其他方式:

items = items.Where(p => keywords.Contains(p.heading.ToLower()) || 
                         keywords.Contains(p.description.ToLower()));
于 2012-12-19T09:31:48.403 回答
1

如果 items 是 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 
于 2012-12-19T10:01:52.590 回答
1

解决了

感谢 sgmoore 的意见 - 它帮助达成了这个解决方案:

IQueryable列表分配给IEnumerable列表,在其上运行 aToList然后在列表上使用我的过滤器效果很好。

IEnumerable<tblItems> temp = items.ToList();

temp = temp.Where(p => p.heading.ToLower().Contains(keywords) || 
                     p.description.ToLower().Contains(keywords));

items = temp.AsQueryable();
于 2012-12-19T10:36:59.330 回答