У меня есть проект MVC, использующий EF Core.В моем контроллере я получаю параметры по 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
, но тогда это должно быть точное совпадение (IE Это не будет соответствовать клиенту по имени "Jhon S. Pots")
Я также думал о том, чтобы сломать searchQuery с помощью метода Split
, но я не знаю, как правильно объединить его с предложением EF Where .. (Я не могу использовать цикл foreach и фильтр для каждой строки, поскольку он будет фильтровать мой результат по каждой строке вместо использования логического оператора OR
)
У кого-нибудь есть идеи, как этого добиться?