【发布时间】:2018-10-08 20:55:39
【问题描述】:
我有一个使用 EF Core 的 MVC 项目。在我的控制器中,我通过 url 接收参数,其中之一是 searchQuery 。我有一张这样格式的客户表:
id | empId | empName | personId | personFirstName | personLastName
请注意,客户要么是雇主,要么是个人,而不是两者。 (相应的字段将为 NULL)。这是我正在使用的查询:
collectionBeforePaging = _context.Customers
.Where(a => (a.Employer == null ? (a.Person.FirstName.Contains(searchQueryForWhereClause) ||
a.Person.LastName.Contains(searchQueryForWhereClause) ||
a.PersonId.ToString().Contains(searchQueryForWhereClause))
: (a.Employer.Name.Contains(searchQueryForWhereClause) ||
a.EmployerId.ToString().Contains(searchQueryForWhereClause))));
这项工作,虽然不是我想要的方式。如果用户搜索“Jhon Pots”,并且客户是人,那么它将检查名字是否包含“Jhon Pots”或姓氏是否包含,而不是检查名字是否包含“Jhon”并且姓氏是否包含“锅”。
我可以连接 firstName 和 lastName ,但它必须是完全匹配的(即它不会匹配名为“Jhon S. Pots”的客户)
我还考虑过使用Split 方法分解searchQuery,但我不知道如何将它与EF Where 子句正确结合..(我不能对每个字符串使用foreach 循环和过滤器,因为它将按每个字符串过滤我的结果,而不是使用OR 逻辑运算符)
有人知道我怎样才能做到这一点吗?
【问题讨论】:
标签: c# asp.net-core entity-framework-core