【发布时间】:2016-12-15 11:55:32
【问题描述】:
我有一个findAll 函数,它从数据库中的Contacts 表中获取所有记录,然后根据用户在搜索表单中选择的值过滤它们。结果一次过滤一个过滤器。
IQueryable<Contact> resultContacts = db.Contacts;
if(request['Name'] != "")
{
resultContacts = resultContacts.Where(a => a.Name.Contains(Name));
}
if(request['Phone'] != "")
{
resultContacts = resultContacts.Where(a => a.Phone.Equals(Phone));
}
if(request['Company'] != "")
{
resultContacts = resultContacts.Where(a => a.Company.Contains(Company));
}
return resultContacts;
问题是现在这不起作用。由于某种原因,每个if 中的resultContacts.Where 正在重置为我在第一行的原始resultContacts。例如:当我调试时,更改适用于第一个 if(我最终得到 100 条记录中的 10 条),但是当我进入第二个 if 时,代码正在查询原始 resultContacts,而不是我拥有的 10由于第一个if。
这在 2 周前之前运行良好一年多。我不知道我的代码是否发生了变化……如果我添加了引用或进行此更改的内容。
知道为什么吗? 谢谢!
【问题讨论】:
-
您的意思是在每个查询中都使用请求对象吗?喜欢
.Contains(request['Name'])); -
我很惊讶 C# 允许这种语法
request['Phone']单引号包含char而不是string -
另外,
request['Name']与Name不同。Phone和Company同上。不要放置有点像你所拥有的代码。发布真实代码。 -
我实际上是将请求变量传递给字符串变量。我只是在示例中使用了“请求”对象来说明清楚。
标签: c# sql .net linq iqueryable