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

如何使用LINQ筛选DataTable中Value列大于0的行

完全赞同你的想法,LINQ确实是处理这类DataTable筛选场景的绝佳选择!下面给你几个可行的解决方案,你可以根据自己的需求来选:

1. 获取筛选后的行集合(IEnumerable)

如果你只需要遍历筛选后的行,不需要生成新的DataTable,可以直接用AsEnumerable()将DataTable转为可枚举集合,再通过Where方法添加筛选条件:

// 需引用System.Data.DataSetExtensions命名空间,才能使用AsEnumerable和Field方法
var filteredRows = dtTable.AsEnumerable()
                         .Where(row => row.Field<long>("Value") > 0);

这里用Field<long>是因为你的Value列是int64类型,对应C#中的long,这个方法能安全地读取列值并避免类型转换错误。

2. 将筛选结果转为新的DataTable

如果需要把筛选出来的行保存为一个新的DataTable,可以在上面的基础上调用CopyToDataTable()方法:

var filteredRows = dtTable.AsEnumerable()
                         .Where(row => row.Field<long>("Value") > 0);

// 转为新的DataTable
DataTable filteredTable = filteredRows.CopyToDataTable();

⚠️ 注意:如果筛选结果为空(没有符合条件的行),CopyToDataTable()会抛出异常。你可以加个判断来避免这种情况:

DataTable filteredTable = filteredRows.Any() 
                          ? filteredRows.CopyToDataTable() 
                          : dtTable.Clone(); // 克隆原表结构,返回空表

3. 使用LINQ查询表达式风格(可选)

如果你更喜欢查询表达式的写法,也可以这样写:

var filteredRows = from row in dtTable.AsEnumerable()
                   where row.Field<long>("Value") > 0
                   select row;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:59