2012-04-25 6 views
0

У меня есть приложение, которое выполняет поиск нашей базы данных (экспонируется через 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?

например. если бы я выбрал получателя. , рабочие места. от .... бла будет правильно разобрать и вернуть связанные объекты получателя и задания?

ответ

2

Если вы начинаете с строго типизированного нефильтрованного запроса, вы можете добавить фильтры, используя Queryable.Where.

Name = txtName.Text 
If Not String.IsNullOrEmpty(Name) Then 
    Query = Query.Where(Function(j) j.Name.Contains(Name)) 
End If 

Если ваш нефильтрованный запрос правильно связывает несколько записей, эти ссылки будут сохранены при добавлении фильтра.

(Отказ от ответственности:. Я обычно не использовать VB.NET, может быть глупые ошибки синтаксиса, но вы должны быть в состоянии получить общее представление)

+0

Так что, если я продолжать называть query.where и добавить в новые функции, они будут приурочены к «и» в SQL? Например, name = john и date = @date. Есть ли способ указать, что они соединяются как или? – Dane

+0

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

Смежные вопросы