Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一行中每x个值求和一次_C#_Vb.net_Linq To Dataset - Fatal编程技术网

C# 一行中每x个值求和一次

C# 一行中每x个值求和一次,c#,vb.net,linq-to-dataset,C#,Vb.net,Linq To Dataset,我有一列日历周和一列金额。现在,我想从4月份的第一个日历周开始,计算每4个日历周的金额。例如,如果我的初始表格中有52(行)个日历周,那么我的最终表格中将有13(行)个日历周(我在这里谈论表格,因为我稍后将尝试将结果绑定到DGV) 我正在使用Linq数据集,并尝试了不同的来源来获得如何解决此问题的提示,但group by、aggregate无法帮助我,但可能有一些我不了解的应用程序,所以我希望你们中的Linq专家能够帮助我 通常我会发布代码,但我可以给你主干,因为我没有起点 _dataset =

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

我正在使用Linq数据集,并尝试了不同的来源来获得如何解决此问题的提示,但group by、aggregate无法帮助我,但可能有一些我不了解的应用程序,所以我希望你们中的Linq专家能够帮助我

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

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

将一周除以四(使用整数除法截断结果),生成一个可以分组的值。

您可以根据需要分组。理论上,您可以使用一个简单的递增数字:

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));
你提到你想在某个月开始,例如四月。您可以使用
skip
Where
跳过行:

dt.Skip(12).Select(...)
i
将始终从0开始,确保您的第一组包含4周。然而,要确切知道要跳过多少周或从哪里开始,您需要更多的日历信息。我假设您的行中有一些字段提到了相应的一周开始日期:

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

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

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());
var group=dt.AsEnumerable().ToLookup(o=>Math.天花((double)o.Field(“日历周”)/4),o=>o.Field(“金额”);
var results=grouped.ToDictionary(result=>result.Key,result=>result.Sum());

日历周列的值是多少?你能发布一些示例数据吗?即使在这种情况下,如果值不同,你将如何对它们进行分组?我相信你说的是SQL
group by
@Rahul将周数除以四的行为会导致前四周、第四周到第八周的每一周都具有相同的值。您可以使用
GroupBy
对该值进行分组,正如您所说的,您已经尝试过了。您好!谢谢你的提示!我现在所做的是将CWeek=(dt.week/4)添加到Total=Sum(dt.amount)中。所有这些变化都是周数从(1->0.25,2->0.5等)变化。你能再推我一下吗?@ruedi就像我说的,你需要执行整数除法,这样结果就会被截断成整数。如果周当前不是整数,则应将其转换为整数。@Servy,这是什么意思?这些项目将按列值“日历周”分组,而不是按索引分组。不过,我没有注意到您所做的一切,您的帖子实际上是错误的,而不仅仅是使用了多余的方法。@Servy-您能准确解释一下您的意思吗?OP提到了一个数据集,每个日历周有一行数据,他们希望每四周汇总一次数据量。所以,第0周到第3周是前四周
Select((row,i)=>Tuple.Create(row,i/4))
为每一行分配一个数字,最后在第一组中包含行0..3等。您认为我的错误在哪里?错误在于您应该根据week列的值对行进行分组,而不是根据结果集中的项目索引。