使用linq求和数据表列
本文关键字:数据表 求和 linq 使用 | 更新日期: 2023-09-27 18:13:03
大家好,我的数据表如下
SKU Quantity UnitPrice LinePrice
A 10 2 20
A 10 2 20
B 10 2 40
我想汇总具有重复记录的SKU,并得到如下结果
SKU Quantity UnitPrice LinePrice
A 20 2 40
B 10 2 40
我试过了,但是没有运气
var query = from row in lDTSalesOrder.AsEnumerable()
group row by row.Field<string>("SKU") into grp
orderby grp.Key
select new
{
Id = grp.Key,
Sum = grp.Sum(r => r.Field<double>("UnitPrice"))
};
在您的示例输出中,您没有实际求和单价,但听起来您想要的是这样的东西:
var results =
from row in lDTSalesOrder
group row by row.Field<string>("SKU") into grp
orderby grp.Key
select new
{
SKU = grp.Key,
Quantity = grp.Sum(r => r.Field<double>("Quantity")),
UnitPrice = grp.Sum(r => r.Field<double>("UnitPrice")),
LinePrice = grp.Sum(r => r.Field<double>("LinePrice"))
};
这将产生:
SKU Quantity UnitPrice LinePrice
A 20 4 40
B 10 2 40
如果您真的想为第一个结果记录生成2
的单价,那么Sum
不是您想要的;你必须使用其他的聚合函数。Min
、Max
、Average
甚至Select(...).First()
都会产生这个结果,但是您必须更精确地定义您想要输出的内容。你也可以这样做:
var results =
from row in lDTSalesOrder
group row by new { SKU = row.Field<string>("SKU"), UnitPrice = row.Field<string>("UnitPrice") } into grp
orderby grp.Key.SKU
select new
{
SKU = grp.Key.SKU,
Quantity = grp.Sum(r => r.Field<double>("Quantity")),
UnitPrice = grp.Key.UnitPrice,
LinePrice = grp.Sum(r => r.Field<double>("LinePrice"))
};
这些选项中的任何一个都将产生:
SKU Quantity UnitPrice LinePrice
A 20 2 40
B 10 2 40