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

Sam*_*Sam 7 c# linq datatable group-by multiple-columns

我在数据表中有三列:string,DateTime和decimal.我想按字符串和十进制列进行分组,对于分组的行,我想对小数值求和.我知道如何进行求和部分,但是如何在数据表中对两个不同的列进行分组?

到目前为止,这是我的代码无法正常工作:

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"))
              };
Run Code Online (Sandbox Code Playgroud)

Str*_*ior 18

我不认为你给了我们完整的故事.除了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();
Run Code Online (Sandbox Code Playgroud)

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

resource_name1 | day_date1            | Sum
1              | 7/1/2011 12:00:00 AM | 1 
2              | 7/1/2011 12:00:00 AM | 2 
Run Code Online (Sandbox Code Playgroud)