c# - c# 使用 linq 对数据表中的多列进行分组

标签 c# linq datatable group-by multiple-columns

我在数据表中有三列:字符串、日期时间和小数。我想按字符串和小数列分组,对于分组的行,我想对小数值求和。我知道如何求和,但如何将数据表中的两个不同列分组?

这是我目前无法正常工作的代码:

var newSort = from row in objectTable.AsEnumerable()
              group row by new {ID = row.Field<string>("resource_name"), time1 = row.Field<DateTime>("day_date")} into grp
              orderby grp.Key
              select new
              {
                 resource_name1 = grp.Key.ID,
                 day_date1 = grp.Key.time1,
                 Sum = grp.Sum(r => r.Field<Decimal>("actual_hrs"))
              };

最佳答案

我认为您没有向我们讲述完整的故事。除了 orderby 不使用匿名类型(您提供的代码不会编译)之外,您的查询应该按照您想要的方式工作。我只是把它放在 LINQPad 中:

var objectTable = new DataTable();
objectTable.Columns.Add("resource_name",typeof(string));
objectTable.Columns.Add("day_date",typeof(DateTime));
objectTable.Columns.Add("actual_hrs",typeof(decimal));
objectTable.Rows.Add(1, DateTime.Today, 1);
objectTable.Rows.Add(2, DateTime.Today, 2);

var newSort = from row in objectTable.AsEnumerable()
            group row by new {ID = row.Field<string>("resource_name"), time1 = row.Field<DateTime>("day_date")} into grp
            select new
                {
                    resource_name1 = grp.Key.ID,
                    day_date1 = grp.Key.time1,
                    Sum = grp.Sum(r => r.Field<Decimal>("actual_hrs"))
                };
newSort.Dump();

...我得到了这些结果:

resource_name1 | day_date1            | Sum
1              | 7/1/2011 12:00:00 AM | 1 
2              | 7/1/2011 12:00:00 AM | 2 

关于c# - c# 使用 linq 对数据表中的多列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551447/

相关文章:

c# - 如何使用 Linq 聚合小数

c# - 在 LINQ 中使用 SUM() 时排除 NULL 值

c# - DataTable 到 Array of arrays

c# - Blazor Wasm 授权状态记录多次

c# - 如何在 Action 中使用可选参数?

c# - 如何从任何对象属性为 null 或空的列表中删除所有?

mysql - 使用并集查询两个表

r - 在 R 中使用 DT 包对列进行分组

c# - 如何使用 EF Code First 避免外表中的重复行

c# - 来自 IIS 中托管的网站的 SOAP API 访问错误