Поиск по всем полям сущности
Я пытаюсь реализовать поиск типа «омнибокс» по базе данных клиентов, где один запрос должен пытаться соответствовать любым свойствам клиента.
Вот некоторые примеры данных, чтобы проиллюстрировать, чего я пытаюсь достичь:
FirstName | LastName | PhoneNumber | ZipCode | ...
--------------------------------------------------
Mary | Jane | 12345 | 98765 | ...
Jane | Fonda | 54321 | 66666 | ...
Billy | Kid | 23455 | 12345 | ...
Если запрос был"Jane"
Я ожидаю, что будет возвращена строка № 1, а также строка № 2.Запрос для12345
даст строки № 1 и № 3.Прямо сейчас мой код выглядит примерно так:
IEnumerable<Customer> searchResult = context.Customer.Where(
c => c.FirstName == query ||
c.LastName == query ||
c.PhoneNumber == query ||
c.ZipCode == query
// and so forth. Fugly, huh?
);
Это очевидно работает. Для меня это пахнет очень плохой практикой, поскольку любое изменение в сущности (удаление свойств, введение новых свойств) может привести к поломке.
Итак: есть ли какой-нибудь LINQ-foo, который будет искать по всем свойствам любого объекта, который я выбрасываю?