在LINQ的WHERE子句下的IF ELSE语句

时间:2016-07-05 02:07:35

标签: c# linq

 where task.RevisionDateTime > startDateTime_
                            && task.RevisionDateTime <= endDateTime_
                            && task.AutoAuditNotes.ToLower() != auditString.ToLower()
                            && (if(isStaging_) condition1 else condition2)
                            select task).ToList();

在where子句中,我有这个IF ELSE语句&& (if(isStaging_) condition1 else condition2)。如何在WHERE子句下添加条件保护isStaging_变量的值?

感谢。

3 个答案:

答案 0 :(得分:5)

您可以这样做:

where task.RevisionDateTime > startDateTime_
                        && task.RevisionDateTime <= endDateTime_
                        && task.AutoAuditNotes.ToLower() != auditString.ToLower()
                        && ((isStaging_ && condition1) || condition2)
                        select task).ToList();

答案 1 :(得分:4)

这不是一个直接的答案 - 我赞成了KiNeTiC的答案。但是这个评论需要一些不能发表评论的代码格式化。

如果将条件分解为单独的函数,这将变得更具可读性。例如,无论如何:

&& ((isStaging_ && condition1) || condition2)

将它放在自己的函数中,其名称描述了它正在检查的内容。分支将使某人难以阅读和关注,甚至是一周之后写作的人。但如果它是一个函数调用,则该函数的名称用作注释。

长LINQ查询在编写时非常令人满意,但是其他人很难理解他们正在做什么。

答案 2 :(得分:0)

你试试

if(isStaging_)
{
    //condition1
    where task.RevisionDateTime > startDateTime_
                        && task.RevisionDateTime <= endDateTime_
                        && task.AutoAuditNotes.ToLower() != auditString.ToLower()
                        select task).ToList();
}
else
{
    //condition2
    where task.RevisionDateTime > startDateTime_
                        && task.RevisionDateTime <= endDateTime_
                        && task.AutoAuditNotes.ToLower() != auditString.ToLower()
                        select task).ToList();
}