c# - .Net - 在 DataTable 中查找最大值
问题描述
我有一个具有各种列的 .net DataTable。我想找到存储在所有行/表中的最大值。目前我正在查看所有行和列,有没有更简单的方法来找到最大值(也许使用LINQ)?
当前代码:
double maxValue = 0;
foreach (DataRow dr in dataTable.Rows)
{
foreach (DataColumn dc in dataTable.Columns)
{
if (dc.ColumnName != "Index" && dr[dc.ColumnName] != DBNull.Value)
{
maxValue = Math.Max(maxValue, Convert.ToDouble(dr[dc.ColumnName]));
}
}
}
解决方案
从技术上讲,您可以像这样将循环转换为Linq:
var maxValue = dataTable
.Rows
.OfType<DataRow>()
.SelectMany(dr => dataTable
.Columns
.OfType<DataColumn>()
.Where(dc => dc.ColumnName != "Index" && dr[dc.ColumnName] != DBNull.Value)
.Select(dc => Convert.ToDouble(dr[dc.ColumnName])))
.Aggregate(0.0, (s, a) => Math.Max(s, a));
或者如果dataTable
至少有一个非负值,你可以Aggregate
变成Max
var maxValue = dataTable
.Rows
.OfType<DataRow>()
.SelectMany(dr => dataTable
.Columns
.OfType<DataColumn>()
.Where(dc => dc.ColumnName != "Index" && dr[dc.ColumnName] != DBNull.Value)
.Select(dc => Convert.ToDouble(dr[dc.ColumnName])))
.Max();
但我怀疑它是否比原始循环更简单或更容易阅读
推荐阅读
- powerbi - 在powerBI中创建一个不受过滤器影响的countif度量
- reactjs - 我不断收到尝试导入错误:'Auth0ProviderWithHistory' 没有从'./auth0-provider-with-history' 导出并且它正确导出
- java - 一种使用循环计算数组中唯一元素的方法(Java)
- javascript - 这个 TypeScript 类型注解实际上意味着什么?
- typescript - Typescript 代理函数以扩展接受的参数或其类型
- python - 每次找到新值时,如何在 pandas df 中添加和更新一个值?
- mongodb - 使用 mongodb 聚合管道比较两个集合并根据需要更新或插入
- python - 想知道如何在tripadvisor上爬行
- java - Windows 2019 上的 Tomcat 9 内存问题
- java - 如何在java中以分层格式获取目录和子目录列表