Добавить условие оператора if в оператор Linq - PullRequest
0 голосов
/ 26 июня 2019

Мне нужен хороший чистый подход к добавлению условного выражения к существующему оператору linq. У меня есть НОВАЯ переменная personContactRoleId, которая будет равна нулю или не равна нулю.

context.PersonContactRoles
          .Where(pcr => pcr.PersonId == personId);                        
          .ToList()
          .ForEach(pcr =>
          {
              // a lot of code
          }

Мне удалось решить эту проблему с помощью iqueryable отсрочки выполнения с помощью оператора if, но это выглядит довольно уродливо и, возможно, менее производительно? Что лучше использовать?

var query = context.PersonContactRoles
          .Where(pcr => pcr.PersonId == personId);                        

if(personContactRoleId != 0)
{
    query = query.Where(b => b.PersonContactRoleId == personContactRoleId);
}

var results = query.ToList();
results.ForEach(pcr =>
{
    // a lot of code
}

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

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

У вас есть подходящее решение, но если вы хотите поместить все это в один запрос без if, вы можете добавить дополнительное условие Where, которое возвращает записи, в которых истинно personContactRoleId == 0 или prc.PersonContactRoleId == personContactRoleId :

context.PersonContactRoles
    .Where(pcr =>
        pcr.PersonId == personId &&
        (personContactRoleId == 0 || pcr.PersonContactRoleId == personContactRoleId))
    .ToList()
    .ForEach(pcr =>
    {
        // a lot of code
    });
0 голосов
/ 26 июня 2019

Это работает без необходимости в блоке if, который проверяет, что personContactRoleId не равен 0

var query = context.PersonContactRoles
              .Where(pcr => pcr.PersonId == personId).Where(b => {
    return b.PersonContactRoleId == personContactRoleId && personContactRoleId != 0

    }).ToList().ForEach(pcr =>
    {
        // a lot of code
    }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...