?? Lambda LINQ中的运算符

时间:2014-01-27 16:16:14

标签: c# linq

results = results.Where(x => x.SomeValue ?? 0 == 0);

我想检查一个值是否为null,如果为null,则将其设为零,然后进行比较。

我不知道如何加上额外的括号()

错误信息是:

4 个答案:

答案 0 :(得分:7)

results = results.Where(x => (x.SomeValue ?? 0) == 0);

但是如果你处理可空类型,我发现更可读的显式检查为null:

results = results.Where(x => !x.SomeValue.HasValue || x.SomeValue == 0);

另一个选项是GetValueOrDefault()方法,它将为整数(长整数,字节)返回零:

results = results.Where(x => x.SomeValue.GetValueOrDefault() == 0);

答案 1 :(得分:3)

试试这个......

results = results.Where(x => (x.SomeValue ?? 0) == 0);

答案 2 :(得分:1)

假设x.SomeValue是一个可以为空的int,你可以这样做:

results = results.Where(x => (x.SomeValue ?? 0) == 0);

但你只能"取代" null值与相同类型的值,所以如果它是一个字符串或其他东西,这将无法正常工作。

您也可以使用内联if运算符执行此操作:

results = results.Where(x => x.SomeValue == null ? true : x.SomeValue == 0)

答案 3 :(得分:1)

你需要一个可以为null的int(int?)类型。

results = results.Where(x => (x.SomeValue ?? 0) == 0);