总结一行中的每个x值

时间:2014-08-11 15:14:22

标签: c# vb.net linq-to-dataset

我有一列calendar week和一列amount。现在我想总结从4月的第一个日历周开始每4个日历周的金额。例如。如果我在我的初始表中有52个(行)日历周,那么我的最终表中将有13个(行)周(我在这里讨论表格,因为我将尝试将结果绑定到DGV)。

我正在使用Linq-to-dataset并尝试了不同的来源以获取提示如何解决这个问题但是group by,aggregate无法帮助我,但也许有一些我不理解的应用程序,所以我希望你们其中一个Linq - 专家可以帮助我。

通常我发布代码,但我可以给你骨干,因为我没有起点。

_dataset = New Dataset1
_adapter.Fill(_dataset.Table1)
dim query = from dt in _dataset.Table1.AsEnumerable()

3 个答案:

答案 0 :(得分:1)

将星期除以4(使用整数除法截断结果)以生成可以分组的值。

答案 1 :(得分:0)

您可以按照自己喜欢的任何方式进行分组。理论上,你可以使用一个简单的递增数字:

var groups = dt
    .Select((row, i) => Tuple.Create(row, i / 4))
    .GroupBy(t => t.Item2);

(c#表示法)

然后你可以计算每组的总和:

var sums = groups
   .Select(g => g.Sum(t => t.Item1.Amount));

你提到你想在某个月开始,例如四月。您可以使用SkipWhere

跳过行
dt.Skip(12).Select(...)

i始终从0开始,确保您的第一组包含4周。但是,要确切知道要跳过多少周或从哪里开始,您需要更多日历信息。我假设你的行中有一些字段提到相应的周的开始日期:

dt.Where(row => row.StartDate >= firstOfApril).Select(...)

答案 2 :(得分:0)

首先将数据转换为月份然后金额的查找。请注意,您的列需要调用CalendarWeekAmount。然后转换为字典并对每个键的值求和:

var grouped = dt.AsEnumerable().ToLookup(o => Math.Ceiling((double) o.Field<int>("CalendarWeek")/4), o => o.Field<double>("Amount"));

var results = grouped.ToDictionary(result => result.Key, result => result.Sum());