Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамическое количество условий в Where, динамическое количество условий в Where 
:(
    Опции темы
Bladerender
Дата 11.11.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Есть у меня запрос в DataTable

   
Код

  var results = from DataRow row in _table.Rows
                          where  ((Double) row["LC"]).ToString() == this.LS
                           && ((string)row["NUL"]).ToLower().Contains(this.NUL)
                           && ((string)row["NDOM"]).StartsWith(this.NDOM)
                           && ((string)row["NKV"]).StartsWith(this.NKV)
                           && ((string)row["FIO"]).ToLower().Contains(this.FIO)
                          select myRow;


Но, дело в том, что некоторые поля могут быть пустые, то есть String.Empty или в случае числа 0, и тогда сам запрос идёт лесом. В смысле не выдает ничего. Это и понятно, но хотелось бы, что бы (ну что-то типа макросов) если поле не пустое, то тогда оно берет участие в Where, если пустое, то тогда не берет.



PM MAIL   Вверх
Bladerender
Дата 11.11.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Блин. Это просто подлость какая-то. Сидишь, ищешь, не находишь, делаешь пост на винград и в течении 5-ти минут после этого находишь то что тебе нужно.  smile  
Я так понял что дохтор прописал мне Dynamic LINQ.
PM MAIL   Вверх
KelTron
Дата 12.11.2009, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 2
Всего: 38



Не знаю что такое Dynamic LINQ, но тебе нужно это:
Код

var results = _table.Rows.AsEnumerable();

if (this.LS != 0)
{
    results = results.Where(row => (Double)row["LC"] == this.LS);
}
if (!string.IsNullOrEmpty(this.NUL))
{
    results = results.Where(row => ((string)row["NUL"]).ToLower().Contains(this.NUL));
}

//... и тд




Это сообщение отредактировал(а) KelTron - 12.11.2009, 05:42


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Любитель
Дата 18.12.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



В данном случае действительно лучшим решением будет "навешивание" дополнительных where. В случае LINQ to SQL иногда имеет смысл не добавлять условие а сделать одно комплексное:
Код

rows.Where(row =>
    (field1 == null || row.Field1 == field1) &&
    (field2 == null || row.Field2 == field2));


Т. к. это позволяет без излишних ухищрений использовать CompiledQuery. К сожалению, в некоторых случаех BuildQuery отъедает больше, чем выполнения запроса базой. Обычно это происходит при большом количестве колонок и джойнов и малом количестве записей (особенно когда большая их часть фильтруется по индексному полю).

Но вообще - надо смотреть по ситуации. И профайлеру smile


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.