首页 > 解决方案 > .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]));
        }
    }
}

标签: c#.netlinqdatatable

解决方案


从技术上讲,您可以像这样将循环转换为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();

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


推荐阅读