我想要一种干净的方法来将条件添加到现有的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
}
同样可以,但是正在寻找一种更清洁的方式
答案 0 :(得分:2)
您拥有的解决方案很好,但是如果您想将其全部放入一个不带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
});
答案 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
}