2

データベースからの数値データで満たされた DataTable オブジェクトがあります。可能なすべての数値のようなデータ型を処理する必要があります (int32、int64、float、さらには datetime ですが、最後は必要ありません)。

列ごとにすべてのデータを正規化する必要があるため、各列の最大値と最小値を見つけて正規化係数を計算する必要があります。

これらの最大値と最小値を見つけるために、すべての行を「手動で」反復する必要がありますか?

背景:

ユーザーがSQL言語で作業し、非常に複雑なSQLクエリを作成する科学的なアプリケーションであるため、SQLでこれを実行したくありません。正規化されたデータを取得したり、最小値/最大値を取得したりするために、さらに複雑なクエリをユーザーに強制したくありません

列は完全に動的であり、ユーザーが作成した SQL クエリに依存します。

4

5 に答える 5

3

これらの最大値と最小値を見つけるために、すべての行を「手動で」反復する必要がありますか?

手動で定義します。はい、all を列挙してMinとの値を計算する必要があります。しかし、それは古い方法またはMaxDataRowsDataTable.Compute

リンク:

int minVal = table.AsEnumerable().Min(r => r.Field<int>("ColName"));
int maxVal = table.AsEnumerable().Max(r => r.Field<int>("ColName"));

DataTable.Compute:

int maxVal = (int)table.Compute("Max(ColName)", "");
于 2013-04-24T13:44:09.537 に答える
1

使用することもできます

Convert.ToInt32(datatable.Compute("min(columnname)", string.Empty));
Convert.ToInt32(datatable.Compute("max(columnname)", string.Empty));
于 2013-04-24T13:45:02.643 に答える
1

asを使用してそれを行うことができますDataTable.Select()

DataRow [] dr = dataTable.Select("ID= MAX(ID)");  

 if(dr !=null)
    {
     // Console.WriteLine(dr[0]["ID"]);
        int maxVal=Convert.ToInt32(dr[0]["ID"]);
    }
于 2013-04-24T13:47:30.097 に答える
1

これを試して:

var min = myTable.AsEnumerable().Min(x => (int)x["column"]);
var max = myTable.AsEnumerable().Max(x => (int)x["column"]);

への参照があることを確認する必要がありSystem.Data.DataSetExtensionsます。これは、デフォルトでは新しいプロジェクトに追加されません。

于 2013-04-24T13:43:23.857 に答える
0

これは私にとってはうまくいきました

int  max = Convert.ToInt32(datatable_name.AsEnumerable()
                        .Max(row => row["column_Name"]));
于 2013-09-27T06:32:14.363 に答える