Несколько операторов в предложении где - PullRequest
0 голосов
/ 10 декабря 2010

У меня странная проблема.У меня есть простые требования поиска, где пользователь может искать данное право (скажем, клиент) на основе нескольких критериев поиска.Пользователь может выбрать, использовать критерии или нет.Условия поиска должны 'И' по всем критериям.Поэтому я пишу такой код (который работает)

IQueryable _customer;

        _customer = from c in DS.properties                        

        where 
                    (txtCustomerName.Text.Length == 0 || c.name == txtCustomerName.Text)
                    && (txtpropcust1.Text.Length == 0 || c.customfield1 == txtpropcust1.Text)
                    && (txtpropcust2.Text.Length == 0 || c.customfield2 == txtpropcust2.Text)
                    && (txtpropcust3.Text.Length == 0 || c.customfield3 == txtpropcust3.Text)
                    && (txtpropcust4.Text.Length == 0 || c.customfield4 == txtpropcust4.Text)
                    && (txtpropcust13.Text.Length == 0 || c.customfield13 == txtpropcust13.Text)

                    select c;

        GridView1.DataContext = _customer;        

Проблема в том, что если у меня есть 14 выражений where, EF выдает ошибку - 13 работает - 14 делаетне.

Я использую службу данных EF + WCF в приложении WPF.Есть ли где-нибудь параметр, ограничивающий количество предложений where?

Спасибо

1 Ответ

1 голос
/ 10 декабря 2010

Чтобы упростить полученный запрос, вы можете использовать:

var customers = DS.properties;

if (txtCustomerName.Text.Length > 0)
    customers = customers.Where(x => x.name == txtCustomerName.Text);
if (txtpropcust1.Text.Length > 0)
    customers = customers.Where(x => x.customfield1 == txtpropcust1.Text);
// etc

_customer = customers;

GridView1.DataContext = _customer;

Обратите внимание, что это добавит предложения SQL where только тогда, когда в этом есть необходимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...