5

重複の可能性:
データテーブル内の列の最小値と最大値を選択する方法は?

データテーブルの列から最小値と最大値 (または最初と最後の値) を見つけることができるコードを探しています。

3 番目の列 (インデックス 2) から最小値と最大値を見つけて、ユーザーに表示したい 4 つの列値を含むデータテーブルを保存しました。

私は多くの方法を試しましたが、すべてが例外を引き起こしています...

最後にこのコードを試しましたが、これでも機能しません..

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

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

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

ありがとうヴィンス

4

3 に答える 3

17

.Selectのメソッドをいつでも使用して、DataTableこれらの行を取得できます。

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

これによりDataRow[]配列が返されますが、通常は1つの行のみが含まれている必要があります(同じ最大値を持つ複数の行がある場合を除く)。

最小値についても同じことが言えます。

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

詳細については、MSDNのドキュメントをDataTable.Select参照してください。

于 2011-07-01T19:46:51.483 に答える
0

答えはstackoverflowで利用できます:データテーブルの列の最小値と最大値を選択する方法は?

ありがとう、Swapnil。

于 2011-07-01T19:49:08.163 に答える
0

どのようなデータ型count startとしてend宣言されていますか? それはあなたのコードには示されていません。

また、提供したコードは、機能している場合、セットの最小値とセットの最大値ではなく、最初と最後の要素のみを提供します。最小/最大を探している場合は、次のようなループを記述する必要があります。

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

明らかに、これらを 1 つのループに結合することもできます。

// 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 の回答は、特定のユース ケース (データ テーブル) に対してよりエレガントですが、私のものは、インデックス付きコレクション内の任意のデータ セットに対して機能します。

于 2011-07-01T19:50:01.100 に答える