将条件语句条件添加到Linq语句

时间:2019-06-25 22:37:32

标签: c# .net linq linq-to-sql linq-to-entities

我想要一种干净的方法来将条件添加到现有的linq语句中。我有一个新变量personContactRoleId,该变量将为零或不为零。

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

我能够使用if语句通过可查询的iquery延迟执行来解决此问题,但是它看起来很丑,性能可能更低?还有更好的使用方式吗?

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 个答案:

答案 0 :(得分:2)

您拥有的解决方案很好,但是如果您想将其全部放入一个不带if的查询中,则可以添加一个附加的Where条件,该条件返回记录中的任何一个personContactRoleId == 0prc.PersonContactRoleId == personContactRoleId为真:

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

答案 1 :(得分:-1)

此方法不需要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
    }