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

时间:2011-07-01 19:39:40

标签: c# datatable max min

  

可能重复:
  How to select min and max values of a column in a datatable?

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

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

我尝试了很多方法,但都导致例外...

最后我试过这段代码,但即使这样也行不通..

count = Convert.ToInt32(dt.Rows.Count);

start = Convert.ToInt32(dt.Rows[0][2].ToString());

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

感谢 文斯

3 个答案:

答案 0 :(得分:17)

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

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

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

同样适用于最低限度:

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

有关详细信息,请参阅MSDN docs on DataTable.Select

答案 1 :(得分:0)

stackoverflow上提供了答案:How to select min and max values of a column in a datatable?

谢谢, Swapnil。

答案 2 :(得分:0)

count startend声称为什么数据类型?这不会显示在您的代码中。

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

// 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];
}
对于您的特定用例(数据表),

@marc_s'的答案更为优雅,但我的答案适用于索引集合中的任何数据集。