2017-04-04 3 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が必要だと私は確信しています。 WarehouseIdによってあなたがグループに必要

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

あなたがそれらの値を取得する方法を説明していただけます2'は - あなたが利用可能な総数量を持っています'6 + 11 + 0 = 17'であり、この値は出力には存在しない。また、サンプルデータに存在しないクエリにQtySellableというフィールドを使用しています –

+0

私は在庫があるアイテムの数を数えようとしていません。在庫があるアイテムを数えようとしています。たとえば、データセットには、3つのSKUアイテムと3つのウェアハウスがあります。各倉庫の各SKUごとに、品目が在庫であることを確認します。 'QtyOrdered> = QtyAvailable'の場合は、カウンタに1を加えます。その商品は在庫です。 – PixelPaul

+0

最初の倉庫には、「QtyOrdered> = QtyAvailable」という項目が1つしかありません。しかし出力で 'QtyInStock:2'と表示されます。 –

答えて

1

: `WarehouseId:1、 QtyInStock:2、QtyNonDropship:

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

mmの権利を発揮します。私はそれを修正しましょう。 – octavioccl

+0

パーフェクト!ちょうど私が探していたもの、ありがとう! – PixelPaul