繁体   English   中英

在DataTable中处理数据-如何查找每列的最大值和最小值?

[英]Processing data in DataTable - how to find minimum and maximum for each column?

我有DataTable对象,该对象充满了数据库中的数字数据。 我必须处理所有可能的类似数字的数据类型(int32,int64,float甚至datetime,但最后那是没有必要的)。

我必须对各列中的所有数据进行归一化,因此我需要为每列查找最大值和最小值以计算归一化系数。

我是否必须“手动”遍历所有行才能找到这些最大值和最小值?

一些背景:

我不想在SQL中执行此操作,因为它是一种科学应用程序,用户可以使用SQL语言工作并编写非常复杂的SQL查询。 我不想强迫用户编写更复杂的查询以获取规范化数据或获取最小值/最大值

列是完全动态的,它们依赖于用户编写的SQL查询。

我是否必须“手动”遍历所有行才能找到这些最大值和最小值?

手动定义。 是的,您必须通过枚举所有DataRows来计算MinMax值。 但这可以通过旧的DataTable.Compute方法或通过

Linq

int minVal = table.AsEnumerable().Min(r => r.Field<int>("ColName"));
int maxVal = table.AsEnumerable().Max(r => r.Field<int>("ColName"));

DataTable.Compute

int maxVal = (int)table.Compute("Max(ColName)", "");

尝试这个:

var min = myTable.AsEnumerable().Min(x => (int)x["column"]);
var max = myTable.AsEnumerable().Max(x => (int)x["column"]);

您需要确保对System.Data.DataSetExtensions的引用在默认情况下不会添加到新项目中。

您也可以使用

Convert.ToInt32(datatable.Compute("min(columnname)", string.Empty));
Convert.ToInt32(datatable.Compute("max(columnname)", string.Empty));

您可以使用DataTable.Select()作为:

DataRow [] dr = dataTable.Select("ID= MAX(ID)");  

 if(dr !=null)
    {
     // Console.WriteLine(dr[0]["ID"]);
        int maxVal=Convert.ToInt32(dr[0]["ID"]);
    }

这对我来说很好

int  max = Convert.ToInt32(datatable_name.AsEnumerable()
                        .Max(row => row["column_Name"]));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM