使用C#在数据表中查找最小值和最大值

本文关键字:最小值 最大值 查找 数据表 使用 | 更新日期: 2023-09-27 18:00:49

可能重复:
如何在数据表中选择列的最小值和最大值?

我正在搜索可以从数据表中的列中找到最小值和最大值(或第一个和最后一个值(的代码。

我已经存储了带有四列值的数据表,我想从第三列(索引2(中找到最小值和最大值,并将其显示给用户。

我尝试了很多方法,但都出现了异常。。。

上次我试过这个代码,但即使这样也不起作用。。

count = Convert.ToInt32(dt.Rows.Count);
start = Convert.ToInt32(dt.Rows[0][2].ToString());
end = Convert.ToInt32(dt.Rows[count-1][2].ToString());

谢谢vince

使用C#在数据表中查找最小值和最大值

您可以始终在DataTable上使用.Select方法来获取这些行:

var maxRow = dt.Select("ID = MAX(ID)");

这将返回一个DataRow[]数组,但它通常只应包含一行(除非有多行具有相同的最大值(。

最低限度也是如此:

var minRow = dt.Select("ID = MIN(ID)");

有关更多详细信息,请参阅DataTable.Select上的MSDN文档。

stackoverflow上提供了答案:如何在数据表中选择列的最小值和最大值?

谢谢,Swapnil。

countstartend声明为什么数据类型?这没有显示在您的代码中。

此外,您提供的代码如果有效,只会给您第一个和最后一个元素,而不是集合中的最小值和最大值。如果你正在寻找最小/最大,你需要写一个循环,比如:

// minimum
int min = dt.Rows[0][2]; // assuming you want the third column (index 2)
for(int i = 1; i < dt.Rows.Count; i++) 
{
    if(min > (int)dt.Rows[i][2]) min = (int)dt.Rows[i][2];
}
// maximum
int max = dt.Rows[0][2]; // assuming you want the third column (index 2)
for(int i = 1; i < dt.Rows.Count; i++) 
{
    if(max < (int)dt.Rows[i][2]) max = (int)dt.Rows[i][2];
}

显然,这些也可以组合成一个单独的循环:

// minimum and maximum
int max = dt.Rows[0][2]; // assuming you want the third column (index 2)
int min = dt.Rows[0][2]; // assuming you want the third column (index 2)
for(int i = 1; i < dt.Rows.Count; i++) 
{
    if(max < (int)dt.Rows[i][2]) max = (int)dt.Rows[i][2];
    if(min > (int)dt.Rows[i][2]) min = (int)dt.Rows[i][2];
}

@marcs的答案对于您的特定用例(数据表(更为优雅,但我的答案适用于索引集合中的任何数据集。