2011-07-01 9 views
5

Powiel możliwe:
How to select min and max values of a column in a datatable?znaleźć MIN i MAX wartości DataTable przy użyciu C#

szukam kodu, który może znaleźć min i max (lub pierwsza i ostatnia wartości) z kolumny w datatable.

Zapisałem datatable z czterema wartościami kolumn Chcę znaleźć wartości min i maksimum z trzeciej kolumny (indeks 2) i wyświetlić je użytkownikowi.

próbowałem wiele sposobów, ale wszystkie są przyczyną wyjątki ...

Ostatnio próbowałem ten kod, ale nawet to nie działa ..

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

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

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

dzięki Vince

+0

Jakie wyjątki widzisz? –

+0

@David "nie ma wiersza na pozycji 0" jest to wyjątek, który otrzymuję dla drugiej linii ... i datatable jest pełny .. nie jest pusty .. – vince

Odpowiedz

16

zawsze można użyj metody .Select na DataTable, aby uzyskać następujące wiersze:

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

Spowoduje to zwrócenie tablicy DataRow[] - ale zazwyczaj powinien zawierać tylko jeden wiersz (chyba że masz wiele wierszy o tej samej, maksymalnej wartości).

samo dotyczy minimum:

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

Zobacz MSDN docs on DataTable.Select więcej szczegółów.

0

Jaki typ danych to count i end zadeklarowany jako? To nie jest pokazane w twoim kodzie.

Kod, który podałeś, jeśli działa, daje tylko pierwszy i ostatni element, a NIE minimum w zestawie i maksimum w zestawie. Jeśli szukasz min/max, trzeba by napisać pętlę, takie jak to:

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

Oczywiście te mogą również być połączone w jednej pętli:

// 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' odpowiedź jest bardziej elegancka dla konkretnego przypadku użycia (tabela danych), ale moja będzie działać dla dowolnego zestawu danych w zbiorze indeksowanym.

+0

@Nate ... przepraszam za to .. .all które są int i mój datatable jest sortowane przez tę kolumnę, więc min i max są pierwszymi i ostatnimi elementami .... – vince

Powiązane problemy