【发布时间】:2018-01-26 01:50:56
【问题描述】:
给定以下行:
Amount, Name, Id
Scenario 1: 100.00,ABC,101
-100.00,ABC,101
Scenario 2: 50.00,XYZ,123
-100.00,XYZ,123
仅当金额总计未达到 0.00 时,我才想对行进行汇总和分组。所以 Linq 查询应该返回:
Amount, Name, Id
Scenario 1: 100.00,ABC,101
-100.00,ABC,101
Scenario 2:-50.00,XYZ,123
到目前为止我所拥有的:
var results = dt.AsEnumerable().GroupBy(row => new
{
Name = row.Field<string>("NAME"),
Id = row.Field<int>("ID")
}).Select(grp =>
{
DataRow dr = dt.NewRow();
dr["AMOUNT"] = grp.Sum(r => r.Field<decimal>("AMOUNT"));
dr["NAME"] = grp.Key.Name;
dr["ID"] = grp.Key.Id;
return dr;
}).CopyToDataTable();
【问题讨论】:
-
我不知道你在问什么,你可能想编辑你的问题来尝试澄清你需要什么。
-
你的例子对我来说是 0 意义
-
只有“XYZ”不“总和”到
0,所以我不确定为什么(根据我如何阅读你想要的)有两个“ABC”值显示在所需的输出(-100.0 + 100.0 == 0.0)。 -
您要求根据分组求和的结果进行分组求和。这是一个三步过程 - 计算总数,保留大于 0 的那些,并为那些导致 0 的行添加行
-
对不起,这些是我在记录中会遇到的不同情况。在场景 1 中:如果总金额加起来为零,则忽略总和。对于方案 2:如果总金额加起来不为零,则求和并分组行。