2011-01-01 13 views
3

Ich möchte die Liste der Verkäufe für jeden Monat nach Produkt sortiert erhalten.Verkauf gruppiert nach Monat, dann nach Produkt

Zur Zeit habe ich die folgende Linq-Abfrage:

 var query = storeDB.OrderDetails 
      .Select(od => od) 
      .GroupBy(r => r.Product) 
      .Select(group => new ProductSalesModel { 
       Product = group.Key, 
       Sales = group.Sum(s => s.Quantity), 
       Amount = group.Sum(s => s.Quantity * s.UnitPrice) 
      }) 
      .OrderByDescending(x => x.Amount); 

Wie soll ich tun, um auch Gruppe der Liste nach Monat, um das Verkaufsdatum aus meiner Bestellung Tisch zu bekommen? Order.CreationDate?

Antwort

2

verwende ich weiß nicht, was Linq-Anbieter Sie verwenden möchten, aber im Klar Linq sollte diese Arbeit:

.GroupBy(r => new {r.Product, r.CreationDate}) 

und dann, wenn Sie wählen:

.Select(group => new ProductSalesModel { 
       Product = group.Key.Product, 
       CreationDate = group.Key.CreationDate, 
       Sales = group.Sum(s => s.Quantity), 
       Amount = group.Sum(s => s.Quantity * s.UnitPrice) 
      }) 
+0

Dies wird durch das gesamte Datum nicht Monat gruppieren - Vielleicht '.GroupBy (r => neue {r.Product, r.CreationDate.Month}) 'könnte die Arbeit machen –

0

Wenn Sie nach etwas bestellen möchten, muss es in der Gruppierung sein. Dann können Sie OrderByDescending(t=> t.amount).ThenBy(y => y.OrderDate)

+0

Sorry, ich möchte nach Datum gruppieren, nicht nach Datum sortieren. Ich änderte die Frage – Marc