将 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 == 0
或 prc.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
}
我想要一种干净利落的方法来将条件添加到现有的 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 == 0
或 prc.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
}