Linq查询多个计数器

时间:2017-04-04 16:05:13

标签: 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 个答案:

答案 0 :(得分: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")
                         };