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

Add a if statement condition to a Linq statement

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

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

我能够通过使用 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
}

同样,这可行,但正在寻找更简洁的方法

你的解决方案很好,但如果你想把它全部放在一个查询中而不需要 if,你可以添加一个额外的 Where 条件,returns 记录在哪里personContactRoleId == 0prc.PersonContactRoleId == personContactRoleId 为真:

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

这不需要 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
    }