如果求和值全为空,如何使linq Sum返回null

Sim*_*eep 14 linq nullable sum

我有一个看起来像这样的LINQ查询...

var duration = Level3Data.AsQueryable().Sum(d => d.DurationMonths);
Run Code Online (Sandbox Code Playgroud)

如果所有d.DurationMonths值都为null,则Sum返回0.null如果全部d.DurationMonths是,我怎么能让Sum返回null?或者我是否需要首先运行单独的查询以在执行总和之前消除这种情况?

Sco*_*vey 11

与之前的扩展方法建议一起 - 您可以使用三元运算符...

var duration = Level3Data.AsQueryable().Any(d => d.DurationMonths.HasValue) 
               ? Level3Data.AsQueryable().Sum(d => d.DurationMonths) 
               : null;
Run Code Online (Sandbox Code Playgroud)

  • 虽然这确实列举了两次结果,但我的集合很小,我发现它最具可读性.所以接受了它.感谢大家. (2认同)

Tho*_*que 5

您可以使用Aggregate提供自定义聚合代码:

var items = Level3Data.AsQueryable();
var duration = items.Aggregate<D,int?>(null, (s, d) => (s == null) ? d.DurationMonths : s + (d.DurationMonths ?? 0));
Run Code Online (Sandbox Code Playgroud)

(假设物品Level3Data属于类型D)