使用多个值在Entity Framework中搜索列

时间:2016-01-09 16:15:49

标签: entity-framework

我正在尝试使用值列表在表的某个特定字段上运行搜索。到目前为止还无法找到解决方案。任何帮助都非常感谢。

这是方案

var records = new PagedList<Required>();
var result = db.Required.Where(x => filter == null || (x.Title.Contains(filter)) || x.CID.Contains(filter));

foreach (string str in SelectedNetwork)
                {
                    string tempStr = str;

                    result = result.Where(x => x.Network == tempStr);
                    records.TotalRecords = result.Count();
                }

records.Content = result
                        .Where(x => filter == null ||
                                (x.Title.Contains(filter))
                                   || x.CID.Contains(filter)
                              )
                        .OrderBy(sort + " " + sortdir)
                        .Skip((page - 1) * Convert.ToInt32(records.PageSize))
                        .Take(Convert.ToInt32(records.PageSize))
                        .ToList();

在foreach循环中突出显示的代码无法按预期运行。有什么办法,我可以解决它吗?

由于 Tutumon

1 个答案:

答案 0 :(得分:0)

在实现它们之前,必须考虑LINQ表达式是查询。要实现它们,您需要枚举它们,或将它们转换为列表,数组或其他任何内容,即在foreach中枚举其成员,或调用ToList()或{{1}之类的方法}。

在您的代码中,存储在结果中的原始查询未实现,因此每次执行ToArray()循环时,都会向原始查询添加新的foreach连续。要避免这种行为,您需要在每次迭代中重新创建整个Where查询,以便获得未过滤表达式的新副本。

还有另一种解决方案可以实现结果查询,然后按原样运行results循环。此解决方案的问题是您将从数据库获取所有数据,将其保留在内存中并在内存副本上运行foreachWhere。除非Count中的行数非常少,否则这将是一个非常糟糕的想法。