我有一个包含各种列的.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/