c#从数据表中求和相同间隔、日期和类型的值
Posted
技术标签:
【中文标题】c#从数据表中求和相同间隔、日期和类型的值【英文标题】:c# Sum values of same interval and date and type from datatable 【发布时间】:2021-02-03 01:44:30 【问题描述】:输入
我有一个DataTable
,其结构如下(带有一些示例值):
输出
我想要一个像这样的DataTable
来保存计算结果:
变换逻辑
我想求和Date
、Interval
和Type
相同的值。
保存逻辑
-
我想将结果复制到另一个
DataTable
。
我想将该副本保存到我在 SQL Server 中的主表中。
注意事项/要求
我想用 LINQ 来做这件事。 我不想为此在 SQL Server 中使用临时表。我的代码(到目前为止)
var result = dt.AsEnumerable().GroupBy(row => new
Date = row.Field<DateTime>("Date"),
Interval = row.Field<DateTime>("Interval"),
Type = row.Field<string>("Type")
)
.Select(a =>
var row = a.First();
row.SetField("Value", a.Sum(r => r.Field<double> "Value")));
return row;
);
var resultdt = result.CopyToDataTable();
【问题讨论】:
请出示您的代码。这样会更容易提供帮助。 我没有要展示的东西。我不知道如何语法,因为我需要按间隔、日期、类型对它们进行分组并获得相同间隔的总和。参数太多,我无法对其进行语法处理。我只能使用一个 group by 和一个简单的 where 来对表达式进行语法,而不是 this。这就是我寻求帮助的原因。 我在阅读了一些关于 linq 的其他主题后发布了一些代码。 @Kate10 您当前的解决方案有什么问题? 使用 GroubBy(x => Interval.Date :日期属性将日期截断到一天开始时的午夜,并从时间中删除小时、分钟、秒。 【参考方案1】:using System;
using System.Data;
using System.Linq;
namespace ConsoleApp4
class Program
static void Main(string[] args)
//Dummy data for demo purpose
DataTable dt = new DataTable();
dt.Columns.Add("Type");
dt.Columns.Add("Date");
dt.Columns.Add("Inverval");
dt.Columns.Add("Value");
dt.Rows.Add("one", "1/1/2020", 0.00, 11);
dt.Rows.Add("one", "1/1/2020", 0.00, 1);
dt.Rows.Add("one", "1/1/2020", 0.15, 1);
dt.Rows.Add("two", "1/1/2020", 0.00, 6);
dt.Rows.Add("two", "1/1/2020", 0.00, 2);
dt.Rows.Add("two", "1/1/2020", 0.15, 4);
var result = from tab in dt.AsEnumerable()
group tab by new
Type = tab["Type"],
Date = tab["Date"],
Inverval = tab["Inverval"]
into groupDt
select new
Type = groupDt.Key.Type,
Date = groupDt.Key.Date,
Inverval = groupDt.Key.Inverval,
Value= groupDt.Sum((r) => decimal.Parse(r["Value"].ToString()))
;
【讨论】:
感谢您撰写本文。我会对其进行测试并回复您。 如何将结果复制到数据表中?【参考方案2】:您需要使用 GroupBy。试试看:
myDataTable.AsEnumerable().GroupBy(x => x.Interval)
【讨论】:
是的,显然不仅仅是间隔。以上是关于c#从数据表中求和相同间隔、日期和类型的值的主要内容,如果未能解决你的问题,请参考以下文章
通过对两个日期之间的值求和来连接两个数据帧,sumif 等效
熊猫:将汇率查询乘以另一个数据框的相同日期后,按每日金额求和和汇总
解决从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值的问题