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

5

可能是重复问题:
如何在Datatable中选择一列的最小和最大值?

我正在寻找能够从datatable中的一列中查找最小值和最大值(或第一个和最后一个值)的代码。

我已经将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());

thanks vince


你看到了哪些异常? - David Neale
@David "在第0行没有数据",这是我在第二行遇到的异常...而且数据表已满,不是空的。 - vince
3个回答

17

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

var maxRow = dt.Select("ID = MAX(ID)");
这将返回一个 DataRow[] 数组 - 但通常只应包含单个行(除非您有多个具有相同最大值的行)。
对于最小值也是如此:
var minRow = dt.Select("ID = MIN(ID)");

请参阅DataTable.Select的MSDN文档以获取更多详细信息。


0

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];
}

@marc_s的答案更加优雅,适用于您特定的使用情况(数据表),但我的答案适用于任何索引集合中的数据集。


@Nate...抱歉...所有的都是整数,我的数据表按照该列排序,因此最小值和最大值是第一个和最后一个元素... - vince

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接