【发布时间】:2017-03-30 12:59:07
【问题描述】:
我正在尝试在我的 ASP.Net 应用程序中使用 LINQ 实现搜索过滤器。
但是我遇到了问题。这是我的代码:
var result = (from x in db.ContactSet
select new Models.Contact
{
AccountId = x.AccountId,
FirstName = x.FirstName,
LastName = x.LastName,
FullName = x.FullName,
JobTitle = x.JobTitle,
ParentCustomerId = x.ParentCustomerId,
EMailAddress1 = x.EMailAddress1,
Telephone1 = x.Telephone1,
MobilePhone = x.MobilePhone,
Fax = x.Fax,
GenderCode = x.GenderCode,
BirthDate = x.BirthDate
}); //? Gets all rows
result = result
.Where(x =>
x.FirstName.Contains(model.searchPhrase) ||
x.LastName.Contains(model.searchPhrase)); //? Search Filter
Gets all rows 代码可以完美地从我的数据库中获取所有行。但是我对代码的Search Filter 部分有疑问。
model.searchPhrase 是一个可以为空的字符串。
每次我运行 Search Filter 时都没有返回任何内容(无论输入是什么。
调试后我注意到在该代码块运行后我得到以下Exception Error:
静态成员:“NotSupportedException”是一种类型,在给定上下文中无效。 非公共成员:“new System.Linq.SystemCore_EnumerableDebugView(result).items”是“System.NotSupportedException”类型的异常
知道这里有什么问题吗?
【问题讨论】:
-
你看到这个答案了吗? stackoverflow.com/a/19791382/728795
-
你的 "gets all rows" 只是一个查询,你没有执行它。因此,当然以后会提出任何异常,例如在您的调试器中。您甚至没有提到 linq 提供程序,它是 Linq-To-Entities 吗?首先检查
var list = result.ToList()是否有效。 -
把
}); //? Gets all rows改成}).ToList(); //? Gets all rows来执行查询,看看这里是否真的出现了错误。您的搜索过滤器对我来说看起来不错。为什么不将两者结合起来并避免首先获取所有行? -
尝试将
Contains的顺序更改为model.searchPhrase.Contains(x.FirstName),LastName的顺序相同