2011-07-01 228 views
5

可能重复:
How to select min and max values of a column in a datatable?找到一个DataTable使用C#的最大值和最小值

我正在寻找的代码,能找到的最小和最大(或第一和最后一个值)来自数据表中的列。

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

我尝试过很多办法,但都是导致异常的...

最后我想这代码,但即使这是行不通的..

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

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

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

感谢 文斯

+0

你看到什么异常? –

+0

@David“位置0没有行”这是我得到的第二行的异常......并且数据表已满..它不是空的.. – vince

回答

16

你总是能请使用DataTable上的.Select方法获取这些行:

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

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

也是一样的最小值:

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

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

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'答案对于您的特定用例(数据表)更为优雅,但是我的工作将适用于索引集合中的任何数据集。

+0

@Nate ...对不起。所有这些都是int,我的数据表是按该列排序的,所以min和max是第一个和最后一个元素.... – vince

相关问题