2017-04-04 3 views
-1

Ich bin neu bei Linq und brauche etwas Hilfe. Ich bin mir nicht einmal sicher, ob das möglich ist. Angesichts der Beispieldaten:Linq Abfrage mit mehreren Zählern

WarehouseId  Sku  Dropship QtyOrdered  QtyAvaliable 
================================================================= 
1    ABC-123     1    6 
2    ABC-123     1    2 
3    ABC-123     1    0 
1    XYZ-789     2    11 
2    XYZ-789     2    1 
3    XYZ-789     2    3 
1    JKL-456 Y    1    0 
2    JKL-456 Y    1    0 
3    JKL-456 Y    1    1 

Ich versuche, die Gesamtzahl der Auftragspositionen auf Lager zu bestimmen für jedes Lager, sowohl für alle Auftragspositionen und Aufträge ohne dropship Artikel. So ist die Ausgabe, die ich suche ist so etwas wie dieses:

WarehouseId: 1, 
QtyInStock: 2, 
QtyNonDropship: 2 

WarehouseId: 2, 
QtyInStock: 1, 
QtyNonDropShip: 1 

WarehouseId: 3, 
QtyInStock: 2, 
QtyNonDropship: 1 

ich eine Linq-Abfrage haben begonnen, aber nicht sicher, wie die Zähler zu tun. Ich bin mir ziemlich sicher, dass ich irgendwo einen GroupBy brauche.

var results = (from o in orderItems 
       where o.QtySellable >= o.QtyOrdered // <-- add '1' to QtyInStock 
       || (o.QtySellable >= o.QtyOrdered && o.Dropship != 'Y')// <-- add '1' to QtyNonDropShip 
       select new 
       { 
        WarehouseId, 
        QtyInStock += QtyInStock 
        QtyNonDropShip += QtyNonDropShip 
       }).ToList(); 
+1

Können Sie mir bitte erklären, wie Sie diese Werte erhalten: 'WarehouseId: 1, QtyInStock: 2, QtyNonDropship: 2' - Sie haben insgesamt verfügbare Menge '6 + 11 + 0 = 17' und dieser Wert ist nicht in der Ausgabe vorhanden. Auch verwenden Sie Feld "QtySellable" in Ihrer Abfrage, die nicht in Beispieldaten vorhanden ist –

+0

Ich versuche nicht, die Anzahl der verfügbaren Artikel auf Lager zu zählen, ich versuche, die Artikel auf Lager zu zählen. Zum Beispiel gibt es im Datensatz 3 Sku-Elemente und 3 Lager. Überprüfen Sie für jedes SKU in jedem Lager, ob der Artikel auf Lager ist. Wenn 'QtyOrdered = = QtyAvailable', dann fügen Sie eins zum Zähler hinzu. Dieser Artikel ist auf Lager. – PixelPaul

+0

Für das erste Lager gibt es nur einen Artikel mit 'QtyOrdered = = QtyAvailable'. Aber in der Ausgabe zeigen Sie 'QtyInStock: 2' –

Antwort

1

Sie müssen Gruppe von WarehouseId:

var results = from o in orderItems 
       group o by o.WarehouseId into g 
       select new { WarehouseId=g.Key, 
          QtyInStock=g.Count(e=>e.QtySellable >= e.QtyOrdered), 
          QtyNonDropShip =g.Count(e=>e.QtySellable >= e.QtyOrdered && e.Dropship != "Y") 
         }; 
+0

Das wird Ihnen "QtyInStock" gleich 3 für das erste Warehouse geben. OP macht es zu 2 –

+0

mm richtig, lass mich das beheben, danke – octavioccl

+0

Perfekt! Genau das, was ich gesucht habe, danke! – PixelPaul