多组by和Sum LINQ

Lui*_*cio 18 c# linq

我有一个产品销售表,如下所示:

saleDate     prod        qty
10/22/09     soap        10
09/22/09     pills       05
09/25/09     soap        06
09/25/09     pills       15
Run Code Online (Sandbox Code Playgroud)

我需要制作每个MONTH的SUM,所以最终的表格看起来像这样:

saleDate     prod        qty
10/09        soap        10
09/09        soap        06
09/09        pills       20
Run Code Online (Sandbox Code Playgroud)

我可以用LINQ做到这一点吗?

Mat*_*ted 44

var products = new[] {
    new {SaleDate = new DateTime(2009,10,22), Product = "Soap", Quantity = 10},
    new {SaleDate = new DateTime(2009,09,22), Product = "Pills", Quantity = 5},
    new {SaleDate = new DateTime(2009,09,25), Product = "Soap", Quantity = 6},
    new {SaleDate = new DateTime(2009,09,25), Product = "Pills", Quantity = 15}
};

var summary = from p in products
              let k = new
              {
                   //try this if you need a date field 
                   //   p.SaleDate.Date.AddDays(-1 *p.SaleDate.Day - 1)
                  Month = p.SaleDate.ToString("MM/yy"),
                  Product = p.Product
              }
              group p by k into t
              select new
              {
                  Month = t.Key.Month,
                  Product = t.Key.Product,
                  Qty = t.Sum(p => p.Quantity)
              };

foreach (var item in summary)
    Console.WriteLine(item);

//{ Month = 10/09, Product = Soap, Qty = 10 }
//{ Month = 09/09, Product = Pills, Qty = 20 }
//{ Month = 09/09, Product = Soap, Qty = 6 }
Run Code Online (Sandbox Code Playgroud)