У меня есть приложение, которое выполняет поиск нашей базы данных (экспонируется через EF) для записей, удовлетворяющих определенным условиям. У нас есть две основные таблицы (Вакансии и Получатели). Получатели привязаны к таблице заданий с помощью идентификатора задания.Необязательно Где предложение в запросе
Запись задания имеет различные поля (дата процесса, имя, тип JobType). У получателя много полей имени и идентификатора (например, номер счета, фамилия и т. Д.)
Я хочу представить экран поиска, где они видят список полей для поиска. Затем код ASP.net видит, какие текстовые поля пользователь вводит (или выбирает), и строит запрос на основе этого.
Я просто пытаюсь найти наиболее эффективный способ.
Грубая логика:
if not string.isnullorempty(txtName.text) then
'Query.Where.Add clause = " AND Name like '@txtName'
'Query.WhereParameters.Add("@txtName",txtNAme.text
end if
if not string.isnullorempty(txtAccountNumber.text) then
.....etc
if not string.isnullorempty(txtFromDate.text) then..
Где я застрял является выяснение того, как добавить дополнительные где статей. Должен ли я просто использовать Entity SQL?
Может ли это вернуть сильно типизированные объекты EF? Можно ли возвращать объекты Jobs и Recipients?
например. если бы я выбрал получателя. , рабочие места. от .... бла будет правильно разобрать и вернуть связанные объекты получателя и задания?
Так что, если я продолжать называть query.where и добавить в новые функции, они будут приурочены к «и» в SQL? Например, name = john и date = @date. Есть ли способ указать, что они соединяются как или? – Dane
1) Да. (Помните часть 'Query =', не просто вызывайте 'Query.Where' и игнорируете результат.) Понятно,' Query = Query.Where (a) .Where (b) .Where (c) 'does (псевдо-код) 'Query = (выберите * from (выберите * from (выберите * from Query где a) где b) где c)', но это дает те же результаты, что и 'Query = (выберите * из Query, где && b && c) ', и EF обычно переводит его как таковое. 2) Для этого вы можете использовать 'Union'. 'Query.Where (a) .Union (Query.Where (b))' дает те же результаты, что и 'Query.Where (a || b)'. – hvd