public ActionResult Index(FormModel form)
{
using (DBModels db = new DBModels())
{
var clients = from c in db.Clients
select c;
if (!String.IsNullOrEmpty(form.SearchString))
{
clients = clients.Where(s => s.Full_Name.Contains(form.SearchString) || s.Class.Contains(form.SearchString)
|| s.Membership_Type.Contains(form.SearchString) || s.Membership_Type.Contains(form.SearchString) ||
s.Notes.Contains(form.SearchString) || s.ClientID.Equals(form.SearchString));
}
if (form.IsChecked != null)
{
clients = clients.Where(t => t.Paid == form.IsChecked);
}
return View(clients);
}
}
不明白为什么会发生此错误。我添加了一个搜索框来搜索数据库。我还添加了一个复选框,以显示未付费的客户。当我更改
return View(clients);
返回
return View(db.Client.ToList());
它有效,但是我要避免,因为它显示了所有列表,而不是“ clients”变量,该变量显示了SearchString中的变量。
答案 0 :(得分:2)
id
是一个IQueryable。在请求第一次迭代之前,IQueryable不会枚举其值。到那时,您的DbContext已经被处置,因此枚举引发异常。
要解决此问题,请使用类似的
categories
从理论上讲,在调用ToList()之前,应避免数据库调用,但是自从我走那条路已经过去了一段时间。相反,我建议使用LinqKit中的PredicateBuilder构建一个完全针对数据库运行的查询,如下所示:
clients
答案 1 :(得分:0)
IQueryable类型的数据结构主要用于迭代目的,在使用ToList之前,它们不会产生值。 这就是为什么在处理dbcontext后不评估您的对象的原因。