Проверьте, является ли значение параметра нулевым или нет внутри запроса - PullRequest
1 голос
/ 02 апреля 2020

В моем запросе я получаю записи на основе RoleId и LocationId, иногда пользователь может не передать местоположение, в этом случае я хочу удалить этот фильтр и получить информацию из всех местоположений.

В настоящее время я делаю так

if(loc > 0)
{
    var myResult = (from x in CSDB.Allocations
                   join s in CSDB.Managers
                   on x.ManagerId equals s.Id
                   Where x.RoleId == 2 && s.LocationId == loc
                   select new
                   {
                    x.name,
                    x.Date
                   }).ToList();
}
else
{
    var myResult = (from x in CSDB.Allocations
                   join s in CSDB.Managers
                   on x.ManagerId equals s.Id
                   Where x.RoleId == 2 
                   select new
                   {
                    x.name,
                    x.Date
                   }).ToList();
}

Я вижу, могу ли я проверить, является ли loc нулем или нет внутри запроса, вместо использования if else.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2020

Вы можете сделать что-то вроде этого:

Where x.RoleId == 2 && (loc == null || s.LocationId == loc)
1 голос
/ 02 апреля 2020

Кроме того, вы можете сделать что-то вроде этого.

Where x.RoleId == 2 && (loc?.Equals(s.LocationId) ?? true)

Если loc просто int Я бы предпочел использовать немного измененный @ Салах Акбари ответ :

Where x.RoleId == 2 && (loc == 0 || s.LocationId == loc)
0 голосов
/ 02 апреля 2020

Просто извлеките своих менеджеров и отфильтруйте их при необходимости. Таким образом, вы также можете легко применять больше фильтров, и читаемость кода не пострадает.

var managers = CSDB.Managers.AsQueryable();

if(loc > 0)
    managers = managers.Where(man => man.LocationId == loc);

var myResult = from allocation in CSDB.Allocations
               join manager in managers on allocation.ManagerId equals manager.Id
               where allocation.RoleId == 2
               select new
               {
                allocation.name,
                allocation.Date
               };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...