在cshtml中将if条件转换为linq



代码

if(Model.CurrentStatus == 1 || Model.CurrentStatus == 2)
{
//can display those records..
}
else if((Model.CurrentStatus == 3 || Model.CurrentStatus == 4) && Model.Date != null)
{
if(Model.Date <= 30 days)
{
//can display those records..
}
}

我已经尝试了以下代码,但无法完全按照预期完成

@Html.Partial("Filter", new IndexModel() 
{ 
Id = Model.Id, 
Collection = Model.Collection.Where((a => a.CurrentStatus == 1 || a.CurrentStatus == 2)
&& ) 
})

如何在cshtml中将上述if条件转换为linq。感谢

else-if关系是OR关系。所以简单地把这两条线结合起来。else-if内部的内部嵌套if是AND关系。这将进入第二组括号

Collection = Model.Collection.Where
(
(a => a.CurrentStatus == 1 || a.CurrentStatus == 2) ||
((a.CurrentStatus == 3 || a.CurrentStatus == 4) && a.Date != null  && a.Date <= 30) 
) 

编辑:

这里还有另一个建议:将可读代码提取到自己的方法中,该方法计算条件并返回布尔结果。通过这种方式,您可以生成一个可以被Where方法接受的谓词:

private bool IsForDisplay( ModelDataType Model )
{
if(Model.CurrentStatus == 1 || Model.CurrentStatus == 2)
{
//can display those records..
return true;
}
else if((Model.CurrentStatus == 3 || Model.CurrentStatus == 4) && Model.Date != null)
{
if(Model.Date <= 30 days)
{
//can display those records..
return true;
}
}
return false;
}

现在您可以简单地在linq表达式中使用它:

@Html.Partial("Filter", new IndexModel() 
{ 
Id = Model.Id, 
Collection = Model.Collection.Where(a => IsForDisplay(a))
});

最新更新