DataTable 求和重复行

DataTable sum duplicate rows

我有 DataTable,它可以有半重复的行。在图片示例中,两个突出显示的行具有完全相同的值,但 'Amount' 列中的金额。我需要识别这些行并计算总金额 $。数据来自文本文件,没有唯一标识行的键。

我看了一些像这样的答案 Best way to remove duplicate entries from a data table 但在我的例子中,不仅需要匹配一列,还需要匹配 10 列。

我也尝试了不同的 LINQ 查询,但没有成功。

这是执行任务的 SQL 查询:

SELECT [Date1],[Date2],[Date3]
      ,SUM([Amount1]) as Summary1
      ,SUM([Amount2]) as Summary2
      ,SUM([Amount3]) as Summary3
      ,[col1],[col2],[Rate1],[Rate2],[Rate3],[product],[comment]
  FROM [Table]
  group by [Date1],[Date2],[Date3],[col1],[col2],[Rate1],[Rate2],[Rate3],[product],[comment]

编辑:澄清一下,SQL 查询是一个示例,说明如果我正在查询 SQL [=31,我将如何获得成功的结果=].

这是使用 EF 的方式:

var result=db.Table
  .GroupBy(r=>new {
      r.Date1,
      r.Date2,
      r.Date3,
      r.col1,
      r.col2,
      r.Rate1,
      r.Rate2,
      r.Rate3,
      r.product,
      r.comment},
  p=>new {
      p.Amount1,
      p.Amount2,
      p.Amount3},
  (key,vals)=>new {
      key.Date1,
      key.Date2,
      key.Date3,
      Amount1=vals.Sum(v=>v.Amount1),
      Amount2=vals.Sum(v=>v.Amount2),
      Amount3=vals.Sum(v=>v.Amount3),
      key.col1,
      key.col2,
      key.Rate1,
      key.Rate2,
      key.Rate3,
      key.product,
      key.comments}
      );

如果您实际上是从数据表中进行的,请稍作修改:

var result=dt.AsEnumerable()
  .GroupBy(d=>new {
      Date1=d.Field<datetime>("Date1"),
      Date2=d.Field<datetime>("Date2"),
      Date3=d.Field<datetime>("Date3"),
      col1=d.Field<string>("col1"),
      col2=d.Field<string>("col2"),
      Rate1=d.Field<decimal>("Rate1"),
      Rate2=d.Field<decimal>("Rate2"),
      Rate3=d.Field<decimal>("Rate3"),
      product=d.Field<string>("product"),
      comments=d.Field<string>("comments")},
  p=>new {
      Amount1=p.Field<decimal>("Amount1"),
      Amount2=p.Field<decimal>("Amount2"),
      Amount3=p.Field<decimal>("Amount3")},
  (key,vals)=>new {
      key.Date1,
      key.Date2,
      key.Date3,
      Amount1=vals.Sum(v=>v.Amount1),
      Amount2=vals.Sum(v=>v.Amount2),
      Amount3=vals.Sum(v=>v.Amount3),
      key.col1,
      key.col2,
      key.Rate1,
      key.Rate2,
      key.Rate3,
      key.product,
      key.comments}
      );

如果您需要将结果作为数据表,您可以使用其中一种列表到数据表扩展方法。只需在上述查询的末尾添加“.ToList().AsDataTable()”即可将其返回到数据表中。