У меня есть следующий метод:Создание WHERE условие с несколькими столбцами
protected override List<Contractor> GetSearchResults()
{
List<User> users = UnitOfWork.UserRepository.Get(
user =>
(!String.IsNullOrEmpty(FirstName) && user.FirstName.Contains(FirstName)) &&
(!String.IsNullOrEmpty(LastName) && user.LastName.Contains(LastName)))
.ToList();
return users ;
}
Это просто «упрощенный» пример. На самом деле у меня есть еще несколько «столбцов» для моего условия.
Оба «условия» связаны с оператором и (& &). Это означает, что:
- Имя должно быть заполнено & должны соответствовать И
- Второе название должно быть заполнены & должны соответствовать
Это не совсем то, что я хочу. Изменение кода с использованием или-оператора (||), как
protected override List<Contractor> GetSearchResults()
{
List<User> users = UnitOfWork.UserRepository.Get(
user =>
(!String.IsNullOrEmpty(FirstName) && user.FirstName.Contains(FirstName)) ||
(!String.IsNullOrEmpty(LastName) && user.LastName.Contains(LastName)))
.ToList();
return users ;
}
не обеспечивает желаемое решение, потому что:
- Имя должно быть заполнено & должны соответствовать ИЛИ
- Второе имя должно быть заполнено &
Итак, что мне нужно?
Например, если я должен следующие записи в моей базе данных:
- Белый, Пол
- Миллер, Джон
- Миллер, Lea
Я ожидаю, что следующие результаты:
- Если только фамилия "Миллер" является я хотел бы получить две записи .
- Если введены фамилия и имя («Миллер» и «Джон»), я ожидаю получить только одну запись.
Мои условия просто не соответствуют этим требованиям, и я не знаю, как «просто» их изменить.
Будет ли это подходит лучше:
protected override List<Contractor> GetSearchResults()
{
List<User> users = UnitOfWork.UserRepository.Get(
user =>
(String.IsNullOrEmpty(FirstName) || (!String.IsNullOrEmpty(FirstName) && user.FirstName.Contains(FirstName))) &&
(String.IsNullOrEmpty(LastName) || (!String.IsNullOrEmpty(LastName) && user.LastName.Contains(LastName))))
.ToList();
return users ;
}
Это похоже на работу. Но с большим количеством столбцов он определенно выглядит уродливым и его трудно читать. Есть ли способ упростить эту задачу?
Я верю '(String.IsNullOrEmpty (FirstName) || (! String.IsNullOrEmpty (FirstName) && user.FirstName.Contains (FirstName)))' может быть упрощено до 'user.FirstName.Contains ((FirstName ?? "")) '. –