【问题标题】:C# Datatable group, select and sumC# 数据表组,选择和求和
【发布时间】:2019-03-29 14:15:37
【问题描述】:

我有一个看起来像这样的数据表

填充数据表后,我使用下面的代码按名称和总和进行分组。

    var result = from tab in dtTemp.AsEnumerable()
                         group tab by tab["Name"]
                         into groupDt
                         select new
                         {
                             Agent = groupDt.Key,
                             Commision = groupDt.Sum((r) => decimal.Parse(r["Amount"].ToString()))

                         };

这给了我这个结果,问题是我缺少 FixedSalary 列。但是,如果我像使用 Commision = groupDt.Sum((r) => decimal.Parse(r["Amount"].ToString())) 一样对其求和,似乎我只能访问列数据 - 而且我不想对该列求和。

提前致谢

【问题讨论】:

  • FixedSalary 列的结果应该如何?例如,Nicklas Christensen 可以有两个不同的 FixedSalaries 还是总是相同的?
  • 不,所有行的固定工资总是相同的 - 但每个名称可能不同
  • 当你分组时,你会得到一个二维数组 [group][items]。所以总和通过项目枚举。如果您需要其他数据,您可以使用 First()、Last()、Select(y => ....) 或类似方法来枚举数组。在您的情况下,可能 FixedSalary = groupDt.First().FixedSalary

标签: c# linq select sum


【解决方案1】:

如果名称的固定工资始终相同,则可以使用:

var result = from tab in dtTemp.AsEnumerable()
                     group tab by tab["Name"]
                     into groupDt
                     select new
                     {
                         Agent = groupDt.Key,
                         Commision = groupDt.Sum((r) => decimal.Parse(r["Amount"].ToString())),
                         FixedSalary = groupDt.Select(r => r["FixedSalary"].ToString()).FirstOrDeafult()
                     };

如果可以更改,则应将其与名称列分组。

【讨论】:

  • 是的,我已经有一个小时的隧道视觉了,谢谢!
猜你喜欢
  • 2019-12-27
  • 2018-01-25
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多