You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LINQ对分组数据求条件平均值返回空值的问题修正

解决LINQ分组计算平均值时的“Sequence contains no elements”错误

你遇到的问题根源很明确:当某个分组里没有任何Field3 > 0.0的元素时,Average()方法因为空序列直接抛出了异常——比如你Table2Sum里那些Field3全为0的独立分组,就会触发这个错误。

要修复这个问题,我们只需要在计算平均值前先判断序列是否为空,或者给空序列一个默认值,下面提供两种可行的修改方案:

方案1:使用DefaultIfEmpty()给空序列兜底

这种方式会在没有有效数据时,用double的默认值0.0来计算平均值,代码简洁直接:

var Table3 = from d in table1sum.Concat(table2sum) 
             group d by new { d.Field1, d.Field2 } into dg 
             let AverageField3 = dg.Where(g => g.Field3 > 0.0).DefaultIfEmpty().Average(g => g.Field3) 
             let Field4Sum = dg.Sum(g => g.Field4) 
             let Field5Sum = dg.Sum(g => g.Field5) 
             let Field6Sum = dg.Sum(g => g.Field6) 
             select new { 
                 SupplierID = dg.Key.Field1, 
                 PropertyID = dg.Key.Field2, 
                 AverageField3, 
                 Field4Sum, 
                 Field5Sum, 
                 Field6Sum 
             };

方案2:显式判断序列是否为空(更灵活)

如果你需要区分“没有有效Field3数据”的场景(比如返回null而不是0.0),可以先提取有效数据再判断:

var Table3 = from d in table1sum.Concat(table2sum) 
             group d by new { d.Field1, d.Field2 } into dg 
             let validField3Entries = dg.Where(g => g.Field3 > 0.0)
             // 这里可以根据需求修改默认值,比如改成null则需要把AverageField3设为double?类型
             let AverageField3 = validField3Entries.Any() ? validField3Entries.Average(g => g.Field3) : 0.0 
             let Field4Sum = dg.Sum(g => g.Field4) 
             let Field5Sum = dg.Sum(g => g.Field5) 
             let Field6Sum = dg.Sum(g => g.Field6) 
             select new { 
                 SupplierID = dg.Key.Field1, 
                 PropertyID = dg.Key.Field2, 
                 AverageField3, 
                 Field4Sum, 
                 Field5Sum, 
                 Field6Sum 
             };

补充说明

两种方案都能解决你的异常问题,同时保证其他字段的总和计算不受影响。如果你的业务场景中需要对“无有效Field3数据”的情况做特殊处理(比如标记为N/A),方案2会更适合,只需要调整默认值的逻辑即可。

内容的提问来源于stack exchange,提问作者Markku Rintala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:30:21