gpt4 book ai didi

c# - 为 daterange 切片数据表,总结计数并创建自定义表?

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:29 25 4
gpt4 key购买 nike

有什么简单的方法可以将数据表切片为一个范围并对一个范围的计数求和吗?

假设我有以下数据表

Date    Count
5/9/2016 5
5/10/2016 1
5/11/2016 2
5/12/2016 4
5/13/2016 3
5/14/2016 2
5/15/2016 1
5/16/2016 4

如果我将它切成 2 份,那么它将合并 2 行......类似

DateRange           Count
5/9/2016-5/10/2016 6
5/11/2016-5/12/2016 6
5/13/2016-5/14/2016 5
5/15/2016-5/16/2016 5

如果我将它切成 3 份,那么它会分成 3 行......类似

DateRange           Count
5/9/2016-5/11/2016 8
5/12/2016-5/14/2016 9
5/15/2016-5/16/2016 5

我试图在 asp:Chart (StackedColumn) 图表中显示日期范围内的数据。日期范围在 7、15、30、60、90、150、365 天之间变化。几乎每天都有一些数据条目,并且还有一个自定义日期控件来选择日期。假设用户选择 200 天的日期范围,200 天他们将有 200 条记录。现在有什么方法可以合并数据并显示在该图表中。目前我正在尝试按月进行,但据我所知有一个自定义日期范围,所以我需要想出一个不同的解决方法,任何帮助.

 public DataTable GetTable()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();

table.Columns.Add("Date", typeof(DateTime));
table.Columns.Add("R", typeof(int));
table.Columns.Add("C", typeof(int));

// Here we add five DataRows.
for (int i = 0; i <= dayschunk; i++)
{
table.Rows.Add(DateTime.Now.Date.AddDays(-i).ToString("MMM-dd"), new Random().Next(0, 99), new Random().Next(0, 99));
}
var results = from row in table.AsEnumerable()
group row by new { Date = row.Field<DateTime>("Date").Month } into rowgroup
select new
{
rowgroup.Key.Date,
Remidiated = rowgroup.Sum(r => r.Field<int>("R")),
Stucked = rowgroup.Sum(r => r.Field<int>("C"))
};
DataTable filtered = new DataTable();
filtered.Columns.Add("DateRange", typeof(int));
filtered.Columns.Add("R", typeof(int));
filtered.Columns.Add("C", typeof(int));
foreach (var item in results)
{
table.Rows.Add(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(item.Date), item.Remidiated, item.Stucked);
}

//table.Rows.Add(2,new DateTime(2016, 05, 02), 50, 50);
//table.Rows.Add(2,new DateTime(2016, 05, 07), 3, 4);
//table.Rows.Add(2,new DateTime(2016, 05, 05), 16, 10);
return filtered;
}

最佳答案

您可以使用 Select 重载来传递索引并创建具有给定大小的 block 来执行此操作。

DataTable result = new DataTable();
result.Columns.Add("DateRange", typeof(string));
result.Columns.Add("Count", typeof(int));


int chunk = 2;

result = table.AsEnumerable()
.Select((row,i) => new {gid= i/chunk, row})
.GroupBy(x=>x.gid)
.Select(x=>
{
var row= result.NewRow();

row["DateRange"] = string.Format("{0}-{1}", x.First().row.Field<DateTime>("Date"), x.Last().row.Field<DateTime>("Date"));
row["Count"]= x.Sum(r=>r.row.Field<int>("R"));
return row;
}).CopyToDataTable<DataRow>();

检查这个Example

注意:我没有应用输出格式,但你可以轻松做到这一点,我会把它留给你。

关于c# - 为 daterange 切片数据表,总结计数并创建自定义表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com