DataTableからの値を集計するためにlinqクエリがうまく機能しています。Linqクエリ - 動的データ型
考えられるのは、ユーザーがフィールドのリストの1つを選択でき、linqが選択したフィールドに従ってデータを集約するということです。
p_measureは、選択したフィールドの名前を示す文字列変数です。
しかし、現在のフォームでは、選択されたフィールドがソーステーブルのデータ型が「float」の場合にのみ、このすべてが機能します。 ユーザーが 'int'を選択した場合、キャスト例外がスローされます。
質問がありますが、私はこのコードをさまざまなデータ型を扱うために「動的」にしていますか?
// Table for receiving aggregated results
var table = new DataTable();
table.Columns.Add(p_dimension, typeof(String));
table.Columns.Add(p_measure, typeof(Double));
// Query to perform aggregation
DataTable query = (from r in rootDT.AsEnumerable()
group r by new
{
Dimension = r.Field<string>(p_dimension)
} into g
select new
{
Dimension = g.Key.Dimension,
Measure = g.Sum(x => x.Field<double>(p_measure))
}
).Aggregate(table, (dt, r) => dt.Rows.Add(r.Dimension,r.Measure); return dt; });
Iが "新しいデータテーブル" 宣言(4行目)タイプを扱うことができる:従って、タイプ型の変数を設定&を生成することによって
table.Columns.Add(p_measure, typeof(Double));
:
table.Columns.Add(p_measure, myTypeVariable);
しかし、私はこの問題をどのように扱うのか迷っています:
x.Field<double>(p_measure)
あなたは 'x.Field' –
esiprogrammer
を試してみましたか?はいの場合は、テーブル全体をメモリに引き込み、メモリ内のすべてのクエリを実行していることを認識していますか? – Euphoric
これはすでにメモリ内のデータテーブルです。ユーザーは、単にdataGridView内のすべてのレコードを表示したいだけでなく、グループ化された合計を示すグラフを表示するだけです。私は大規模なレコードセットであれば、データベースで重い作業をすることを検討すべきだと私は理解しています。 – Esby