0

我有一个数据表,像这样:

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

Count我想根据列中的内容对列进行总结Amount

我想找到Count所有Amount介于 0 - 50 和 51-100 之间的总和,在本例中为 3 和 7。

有没有办法快速获取这些数据?

这是我目前拥有的:

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 回答