0

次のような DataTable があります。

Amount | Count
-----------------------
20.0   | 2
42.0   | 1
78.0   | 5
91.0   | 2

Countコラムの内容に基づいて、コラムを要約したいと思いAmountます。

0 ~ 50 と 51 ~ 100 の間Countのすべての合計を求めたいとします。この例では 3 と 7 になります。Amount

そのデータをすばやく取得する方法はありますか?

これが私が現在持っているものです:

foreach (int min in ranges)
{
    int max = min + 50;
    int count = 0;

    foreach (DataRow dr in dt)
    {
        if (dr["Amount"] > min && dr["Amount"] < max)
            count += dr["Count"];
    }
}

よりエレガントなソリューションを探しています

4

1 に答える 1

1

Linq を学習するための良いリンクは101 Linq samplesです。次のコードは、0 から <50、50 から <100 などの範囲を作成しますが、適切な出発点となるはずです。範囲には一定の間隔があると想定しています。

var dt = new DataTable();
dt.Columns.Add("Amount", typeof(int));
dt.Columns.Add("Count", typeof(int));
dt.Rows.Add(20, 2);
dt.Rows.Add(42, 1);
dt.Rows.Add(78, 5);
dt.Rows.Add(91, 2);
var result = from DataRow x in dt.Rows
                group x by ((int)x["Amount"]) / 50 into grp 
                select new {LowerBoundIncl = grp.Key * 50, 
                        UpperBoundExcl = (grp.Key + 1) * 50, 
                        TotalCount = grp.Sum(y => (int) y["Count"])};

お役に立てれば。

于 2013-11-06T20:35:40.227 に答える