我正在尝试使用值列表在表的某个特定字段上运行搜索。到目前为止还无法找到解决方案。任何帮助都非常感谢。
这是方案
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
答案 0 :(得分:0)
在实现它们之前,必须考虑LINQ表达式是查询。要实现它们,您需要枚举它们,或将它们转换为列表,数组或其他任何内容,即在foreach
中枚举其成员,或调用ToList()
或{{1}之类的方法}。
在您的代码中,存储在结果中的原始查询未实现,因此每次执行ToArray()
循环时,都会向原始查询添加新的foreach
连续。要避免这种行为,您需要在每次迭代中重新创建整个Where
查询,以便获得未过滤表达式的新副本。
还有另一种解决方案可以实现结果查询,然后按原样运行results
循环。此解决方案的问题是您将从数据库获取所有数据,将其保留在内存中并在内存副本上运行foreach
和Where
。除非Count
中的行数非常少,否则这将是一个非常糟糕的想法。