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

DataGridView两列求和的Linq最大值计算问题(含空单元格场景)

解决DataGridView中含空单元格的列求和最大值计算问题

原代码的核心问题是直接过滤掉了vHigh或VLow列为空的行,但实际业务场景中空单元格应该视为0参与求和,导致本该纳入计算的行被排除,无法得到正确的最大值。

改进后的代码

double MaxSales = dgvSales.Rows.Cast<DataGridViewRow>()
    .Where(row => row.Cells["Jaar"].Value?.ToString() == lblSelectedJaar.Text)
    .Select(row => 
    {
        // 空单元格视为0参与计算
        double vHigh = row.Cells["vHigh"].Value is DBNull ? 0 : Convert.ToDouble(row.Cells["vHigh"].Value);
        double vLow = row.Cells["VLow"].Value is DBNull ? 0 : Convert.ToDouble(row.Cells["VLow"].Value);
        return vHigh + vLow;
    })
    .DefaultIfEmpty(0) // 无符合条件数据时返回0,避免Max方法抛出异常
    .Max();

关键改进点

  • 空值处理:不再过滤含空单元格的行,而是将DBNull.Value转换为0后参与求和,确保所有符合年份条件的行都被纳入计算
  • 空安全访问:用?.ToString()处理Jaar列可能为空的情况,避免空引用异常
  • 空序列防护:添加DefaultIfEmpty(0),当筛选后没有匹配的行时,Max方法会返回默认值0,不会抛出InvalidOperationException

原代码的Where条件会剔除任何vHigh或VLow为空的行,比如某行vHigh为空但VLow有值,这行的求和值(0+VLow值)本可能是最大值,却被直接排除了,这就是结果不准确的原因。改进后的逻辑更贴合实际业务需求,能正确计算所有符合年份条件的行的求和最大值。

内容的提问来源于stack exchange,提问作者Ronald Roenhorst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:31