使用LINQ检查可空类型

时间:2017-07-31 12:53:47

标签: c# linq

我有一个方法,它将可以为空的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语句中使用?

4 个答案:

答案 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)