2017-04-04 76 views
-1

我是Linq的新手,需要一些幫助。事實上,我甚至不確定這是可能的。鑑於樣本數據:有多個計數器的Linq查詢

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 

我試圖確定股票的訂單項目總數的每個倉庫,都爲所有訂單項目,訂單兵船沒有物品。所以我正在尋找的輸出是這樣的:

WarehouseId: 1, 
QtyInStock: 2, 
QtyNonDropship: 2 

WarehouseId: 2, 
QtyInStock: 1, 
QtyNonDropShip: 1 

WarehouseId: 3, 
QtyInStock: 2, 
QtyNonDropship: 1 

我已經啓動了一個Linq查詢,但不知道如何做計數器。我很確定我需要某個地方的GroupBy

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

能否請你解釋你是如何得到這些值:'WarehouseId:1, QtyInStock:2,QtyNonDropship:2' - 你有總的可用數量'6 + 11 + 0 = 17',這個值不會出現在輸出中。您也正在查詢中使用字段'QtySellable',這在示例數據中不存在 –

+0

我並不試圖計算庫存中可用項目的數量,我正在計算庫存中的項目。例如在數據集中,有3個sku項目和3個倉庫。對於每個倉庫的每個SKU,請檢查該物品是否有庫存。如果'QtyOrdered> = QtyAvailable',則添加一個計數器。該項目有現貨。 – PixelPaul

+0

對於第一個倉庫,只有一個項目的'QtyOrdered> = QtyAvailable'。但在輸出你顯示'QtyInStock:2' –

回答

1

你需要按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

這會給你'QtyInStock'等於3的第一個倉庫。 OP執行它爲2 –

+0

毫米權利,讓我解決,謝謝 – octavioccl

+0

完美!正是我在找的,謝謝! – PixelPaul