C#:使用Field方法按数据表中的多列分组LINQ查询

时间:2019-06-10 07:34:39

标签: c# .net linq

我试图按年和单位来获得t&kg分组的总和。 使用Field方法在Linq中完成它时遇到问题。然而。我无需使用Field方法就可以做到这一点。

数据表中的数据采用以下格式。

Unit  Quantity  Year
 "t"    "10"    2019
 "t"    "05"    2018
 "kg"   "05"    2018
 "t"    "02"    2019
 "kg"   "14"    2018
 "kg"   "28"    2019

结果应该是这个

结果

 Total 2018 in kg - 19 
 Total 2018 in t  - 05
 Total 2019 in kg - 28
 Total 2019 in t  - 12

这是我现在拥有的全部内容,它按我在group by语句中提到的所有3列分组。但是,如果我不这样做,那么我将无法访问select语句中的该列。

代码段

注意:我没有模型属性结构。

DataTable Dt = dsData.Tables["Data2019"];

 var data = from mfRecords in Dt.AsEnumerable()
        group mfRecords by new
        {
         DataUnit = mfRecords.Field<string>("Unit").ToString(),
         Quantity = Convert.ToDouble(mfRecords.Field<string>("Qty")),
         RecordYear = Convert.ToDateTime(mfRecords.Field<string>("SalesDate")).Year,
        } into g
        select new
         {
          SalesYear = g.Key.RecordYear,
          SalesUnit = g.Key.DataUnit,  
          TotalQty = g.Sum(k => g.Key.Quantity)
         };

这是通过使用LINQ完成的

var data = lst.Select(k => new { k.SalesDate.Year, k.Qty, k.Unit })
            .GroupBy(x => new { x.Year,x.Unit }, (key, group) => new
            {
                SalesYear =  key.Year,
                SalesUnit = key.Unit,
                TotalQty = string.Format("{0:0.00}",group.Sum(k => k.Qty))
            })            
            .ToList();

有人知道我如何使用LINQ通过Field方法进行分组吗?

1 个答案:

答案 0 :(得分:1)

改为这样:

 var data = from mfRecords in Dt.AsEnumerable()
            group mfRecords by new
            {
             DataUnit = mfRecords.Field<string>("Unit").ToString(),
             RecordYear = mfRecords.Field<string>("SalesDate")
            } into g
            select new
             {
              SalesYear = g.Key.RecordYear,
              SalesUnit = g.Key.DataUnit,  
              TotalQty = g.Sum(k => int.Parse((string)k["Qty"]))
             };

说明:您不需要按数量分组,因为这是您想要求和的结果。