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

C#从DataTable取最大值时报Sequence contains no elements错误如何解决

错误原因

Sequence contains no elements 错误的触发原因是:Where 条件筛选后得到的行序列为空,要么是当前DataTable没有数据行,要么是所有行的dataComponent字段都无法转换为有效int值,Max方法默认不支持对空序列执行聚合计算。

修复方案

以下方案同时优化了原有代码两次解析int的冗余操作,性能更优:

  • 方案1:全.NET版本兼容,使用DefaultIfEmpty指定空序列默认值
int highestNumber = dt1.Tables[0].AsEnumerable()
    // 一次解析转换为可空int,无法解析的返回null
    .Select(x => int.TryParse(x.Field<string>("dataComponent"), out int val) ? val : (int?)null)
    // 过滤掉无法解析的空值
    .Where(x => x.HasValue)
    .Select(x => x.Value)
    // 空序列时默认返回0,可根据业务需求调整默认值
    .DefaultIfEmpty(0)
    .Max();
  • 方案2:.NET Core 3.0+ / .NET 5+ 及以上版本,直接使用内置MaxOrDefault方法
int highestNumber = dt1.Tables[0].AsEnumerable()
    .Select(x => int.TryParse(x.Field<string>("dataComponent"), out int val) ? val : (int?)null)
    // 空序列时返回默认值0
    .MaxOrDefault(0);
  • 方案3:先判断是否存在有效值再计算最大值
var validRows = dt1.Tables[0].AsEnumerable()
    .Where(x => int.TryParse(x.Field<string>("dataComponent"), out int _))
    .ToList();

int highestNumber = validRows.Any() 
    ? validRows.Max(m => int.Parse(m.Field<string>("dataComponent"))) 
    : 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:06:08