我有一个方法,它将可以为空的DateTime类型 effectiveDate 作为参数。
List<Scales> GetScales(scales scaleId, DateTime? effectiveDate, int count)
{
return scales.Where(rs => rs.ScaleID != scaleId)
.Where(rs => rs.Review.ReleaseDate >= effectiveDate)
.OrderByDescending(rs => rs.Review.ReleaseDate)
.Take(count)
.ToList();
}
此方法返回一个列表。我想要做的是,如果 effectiveDate 为null,则它不会检查.Where(rs => rs.Review.ReleaseDate >= effectiveDate)
条件。
我可以通过IF..ELSE
条件轻松实现此目的。但我想知道,是否可以在一个LINQ语句中使用?
答案 0 :(得分:4)
如果您想要包含没有生效日期的所有条目:
.Where(rs => !effectiveDate.HasValue || rs.Review.ReleaseDate >= effectiveDate)
答案 1 :(得分:2)
您可以使用conditional operator进行if-else检查。
但是在你的情况下,只使用与&&
或||
链接的条件将从左到右进行评估的事实,并且在真值之后可以停止对条件的评估分配。对于OR运算符||
,这意味着如果第一个条件为true
或第一个条件为false
且第二个条件为true
,则符合条件:
.Where(rs => !effectiveDate.HasValue || rs.Review.ReleaseDate >= effectiveDate)
答案 2 :(得分:0)
如果你说复合条件
怎么办?.Where(rs => effectiveDate.HasValue && rs.Review.ReleaseDate >= effectiveDate)
答案 3 :(得分:-1)
我只是检查一下这段代码,它对我有用。
.Where(rs =>effectiveDate.HasValue? rs.Review.ReleaseDat>=effectiveDate.Value:true)