2011-07-01 127 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

相關問題