C# 处理DataTable中的数据-如何找到每列的最小值和最大值?

C# 处理DataTable中的数据-如何找到每列的最小值和最大值?,c#,datatable,C#,Datatable,我有一个DataTable对象,它由数据库中的数字数据填充。我必须处理所有可能的类似数字的数据类型(int32、int64、float、甚至datetime,但最后一种不是必需的) 我必须规范化列中的所有数据,每个列都是单独的,所以我需要找到每个列的最大值和最小值来计算规范化系数 我是否必须“手动”遍历所有行以查找这些最大值和最小值 一些背景: 我不想在SQL中这样做,因为它是一种科学应用,用户使用SQL语言编写非常复杂的SQL查询。我不想强迫用户编写更复杂的查询来获取规范化数据或获取最小/最大

我有一个DataTable对象,它由数据库中的数字数据填充。我必须处理所有可能的类似数字的数据类型(int32、int64、float、甚至datetime,但最后一种不是必需的)

我必须规范化列中的所有数据,每个列都是单独的,所以我需要找到每个列的最大值和最小值来计算规范化系数

我是否必须“手动”遍历所有行以查找这些最大值和最小值

一些背景:

我不想在SQL中这样做,因为它是一种科学应用,用户使用SQL语言编写非常复杂的SQL查询。我不想强迫用户编写更复杂的查询来获取规范化数据或获取最小/最大值

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

尝试以下操作:

var min = myTable.AsEnumerable().Min(x => (int)x["column"]);
var max = myTable.AsEnumerable().Max(x => (int)x["column"]);
您需要确保有一个对
System.Data.DataSetExtensions
的引用,默认情况下不会添加到新项目中

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

手动定义。是的,您必须通过枚举所有
数据行来计算
Min
Max
值。但这可以通过旧的
DataTable.Compute方法或使用

:

你也可以使用

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"]));

你能将列值作为IEnumerable吗???都是整数数据类型吗?@Daniel我不知道如何使用IEnumerable:(@Arshad No。我必须处理所有可能的数字数据类型,而不仅仅是整数。谢谢。你能告诉我这两种方法的速度和内存使用情况吗?或者我必须自己检查一下。Linq在可读性、可扩展性和可维护性方面更强大。两者在速度和内存使用方面都很相似(即使是
DataRow.Field
扩展方法也需要在引擎盖下装箱/取消装箱值,即使它似乎是强类型的)。
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"]));