powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / проверка IS NULL OR в запросе dbcontext.table.where
17 сообщений из 17, страница 1 из 1
проверка IS NULL OR в запросе dbcontext.table.where
    #38972736
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Пишу вот такую выборку:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
 public List<Table123> ExtendedSeach(int? param1, int?  param2, int?  param3,  int?  param4, int?  param5, int?  param6)
         {

             List<Table123> data = dbcontext.Table123.Where(x => x.Param1 = param1 && x.Param2 = param2
&& x.Param3 = param3 && x.Param4 = param4 && x.Param5 = param5 && x.Param6 = param6                
                 ).OrderByDescending(x => x.Id).Take(4).ToList();
             return data;
         }



меня интересует вопрос, если один из параметров будет == null, то функция Where не сработает.
в T-sql хранимой процедуре я писал вот так

Код: sql
1.
2.
 ((@param1IS NULL)  OR (shp.Param1= @param1)) 
 AND ((@param2 IS NULL)      OR (shp.Param2= @param2))



Можно ли как то в EF написать как-нибудь аналогично?
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972765
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardieМожно ли как то в EF написать как-нибудь аналогично?

да, конечно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var data = 
   dbcontext.Table123
      .Where(x => 
           (x.Param1 == null || x.Param1 = param1)
           && (x.Param2 == null || x.Param2 = param2)
           && (x.Param3 == null || x.Param3 = param3) 
           && (x.Param4 == null || x.Param4 = param4) 
           && (x.Param5 == null || x.Param5 = param5) 
           && (x.Param6 == null || x.Param6 = param6))
       .OrderByDescending(x => x.Id)
       .Take(4)
       .ToList();



и эта... полюбите правильные отступы. очень поможет ))
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972777
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы знаете, делаю следующим образом и все равно, пока все параметры не введу поиск не происходит

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var AnonymusData = (from shp in lookDB.Shopping 
                                 join usp in lookDB.UserProfile on  shp.UserId equals usp.UserId
                                 join phm in lookDB.PhotosMarks on shp.Id equals phm.IdObject
                                 where  (shp.Name == null      || shp.Name.Contains(SearchName))
                                 &&     (shp.inCountry == null || shp.inCountry == selectedIdCountryhiddenSearch)
                                 &&     (shp.inCity == null    || shp.inCity == selectedIdCityhiddenSearch)
 select new                                  {
                                     IdObj = shp.Id,
                                     UserId = shp.UserId,
                                     Name = shp.Name,
                                     inCountry = shp.inCountry,
                                     inCity = shp.inCity,
                                     Date = shp.Date,
                                     description = shp.description,
                                     recommendations = shp.recommendations,
                                     transport = shp.transport,
                                     Photos = shp.Photos,
                                     PhotosChild = shp.PhotosChild,
                                     PhotosCount = shp.Photos.Count
                                 }).Take(4).ToList(); 
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972799
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardie,

надо глянуть что там на выходе генерируется, вот так:

https://msdn.microsoft.com/en-us/data/dn469464.aspx

сюда скиньте, посмотрим.
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972830
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttyardieМожно ли как то в EF написать как-нибудь аналогично?

да, конечно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var data = 
   dbcontext.Table123
      .Where(x => 
           (x.Param1 == null || x.Param1 = param1)
           && (x.Param2 == null || x.Param2 = param2)
           && (x.Param3 == null || x.Param3 = param3) 
           && (x.Param4 == null || x.Param4 = param4) 
           && (x.Param5 == null || x.Param5 = param5) 
           && (x.Param6 == null || x.Param6 = param6))
       .OrderByDescending(x => x.Id)
       .Take(4)
       .ToList();



и эта... полюбите правильные отступы. очень поможет ))


Да ему не поля нужно на нал проверять, а параметры.
Можно сделать типо так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var query = (from shp in lookDB.Shopping 
                  join usp in lookDB.UserProfile on  shp.UserId equals usp.UserId
                  join phm in lookDB.PhotosMarks on shp.Id equals phm.IdObject
                  select shp);

if(selectedIdCountryhiddenSearch.HasValue)
   query = query.Where(s => s.inCountry == selectedIdCountryhiddenSearch);

return query.Take(4).ToList();
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972837
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонДа ему не поля нужно на нал проверять, а параметры.

Я тоже так подумал, но предложил именно такое решение, как ТС показал в своём SQL.
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972844
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttпропущено...


да, конечно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var data = 
   dbcontext.Table123
      .Where(x => 
           (x.Param1 == null || x.Param1 = param1)
           && (x.Param2 == null || x.Param2 = param2)
           && (x.Param3 == null || x.Param3 = param3) 
           && (x.Param4 == null || x.Param4 = param4) 
           && (x.Param5 == null || x.Param5 = param5) 
           && (x.Param6 == null || x.Param6 = param6))
       .OrderByDescending(x => x.Id)
       .Take(4)
       .ToList();



и эта... полюбите правильные отступы. очень поможет ))


Да ему не поля нужно на нал проверять, а параметры.
Можно сделать типо так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var query = (from shp in lookDB.Shopping 
                  join usp in lookDB.UserProfile on  shp.UserId equals usp.UserId
                  join phm in lookDB.PhotosMarks on shp.Id equals phm.IdObject
                  select shp);

if(selectedIdCountryhiddenSearch.HasValue)
   query = query.Where(s => s.inCountry == selectedIdCountryhiddenSearch);

return query.Take(4).ToList();




Хмм, это интересно.
но как быть если у меня много параметров, как это правильно записать?
Я же проверять должен каждый параметр.
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972845
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПарамонДа ему не поля нужно на нал проверять, а параметры.

Я тоже так подумал, но предложил именно такое решение, как ТС показал в своём SQL.

Это?

Код: c#
1.
@param2 IS NULL



дык парам это не поле )
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972850
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardieХмм, это интересно.
но как быть если у меня много параметров, как это правильно записать?
Я же проверять должен каждый параметр.

Код: c#
1.
2.
3.
4.
5.
6.
7.
if(selectedIdCountryhiddenSearch.HasValue)
   query = query.Where(s => s.inCountry == selectedIdCountryhiddenSearch);

if(selectedIdCountryhiddenSearch1.HasValue)
   query = query.Where(s => s.inCountry1 == selectedIdCountryhiddenSearch1);

....


проблема то в чем?
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972852
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardie,

Нормальная практика, строить динамический запрос, а транслировать в sql всякое непонятно что. )
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972857
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЭто?

Код: c#
1.
@param2 IS NULL




дык парам это не поле )

етить... точно
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38972861
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон не транслировать в sql всякое непонятно что. )
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38978463
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем как оказалось ЛУЧШЕЕ решение - это написать хранимку, замапить ее в EF и работать с ней!
Во первых быстрота выборки значительно увеличилась, а на больших объемах информации так тем более,
а во вторых работает 100% и просто прекрасно!))))
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38978480
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardieВо первых быстрота выборки значительно увеличилась, а на больших объемах информации так тем более,
а во вторых работает 100% и просто прекрасно!))))

как замеряли?
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38978503
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttyardieВо первых быстрота выборки значительно увеличилась, а на больших объемах информации так тем более,
а во вторых работает 100% и просто прекрасно!))))

как замеряли?


не замерял, это и так известно, что хранимка быстрее работает чем EF
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38978505
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardieне замерял, это и так известно, что хранимка быстрее работает чем EF

т.е. вот достоверность вот этого утверждения:

yardieВо первых быстрота выборки значительно увеличилась, а на больших объемах информации так тем более

базируется исключительно на вот этом постулате:

yardieне замерял, это и так известно, что хранимка быстрее работает чем EF

вопрос. у вас с логикой-то всё в порядке?

хотя чего я спрашиваю, не интересно, проходим мимо.
...
Рейтинг: 0 / 0
проверка IS NULL OR в запросе dbcontext.table.where
    #38978636
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yardiehVosttпропущено...


как замеряли?


не замерял, это и так известно, что хранимка быстрее работает чем EFто есть Вы не знаете как изменился запрос и план его выполнения, но с умным видом делаете заявления, забавно

про parameter sniffing Вам что-нибудь известно? тестировали, надеюсь, не на одном входном наборе данных?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / проверка IS NULL OR в запросе dbcontext.table.where
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]