c# - .Net - 查找数据表中的最大值

标签 c# .net linq 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();

但我怀疑它是否比原始循环更简单或更容易阅读

关于c# - .Net - 查找数据表中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901384/

相关文章:

c# - 是否可以指定条件输出绑定(bind)?

c# - async 如何处理封闭的 UI?

c# - 使用 Lambda/Linq 获取按字母顺序排列的项目列表?

C# 删除 typeof 并仅将类名传递给函数

c# - 如何在 .net Framework 4.6 上启用 Vector.IsHardwareAccelerated?

Linq - 过滤多个可能的相等值

c# - 使用 PLINQ 时如何避免内存不足异常?

c# - Azure 部署 : A route named 'HelpPage_Default' is already in the route collection. 路由名称必须是唯一的。参数名称:名称

c# - TPL 数据流 block 消耗所有可用内存

c# - 如何将总秒值转换为 'hours minutes seconds' 格式的字符串