二段Linq Groupby操作

var messages = list.GroupBy(p=>p.RefOrderNo,(k,v)=> new {OrderNo = k,SkuInfo = v})
                    .Select(p =>
                    {
                        var item = p.SkuInfo.FirstOrDefault();
                        return new ReplaceLabelSkuMessage
                        {
                            OrderNo = p.OrderNo,
                            Operation = new WMS.Message.Operation
                            {
                                Operator = item.CreateBy,
                                OperateTime = item.CreateOn
                            },
                            ReplaceLabelSkuDetail = p.SkuInfo.Select(s => new ReplaceLabelSkuDetail
                            {
                                SKU = s.SKU,
                                Weight = s.Weight,
                                Lenght = s.Lenght,
                                Width = s.Width,
                                Height = s.Height
                            }).ToList()
                        };                        
                    });
var request = deliveryList.GroupBy(g => g.DeliveryNo)
                    .Select(delivery =>
                    {
                        var item = delivery.FirstOrDefault();
                        var yewuRequest = new DeliveryTicketShipOutMessage
                        {
                            DeliveryTicketNo = item.DeliveryNo,
                            DeliveryType = TMS.Message.DeliveryTicket.DeliveryType.Logistics,
                            WarehouseCode = item.YewuWarehouseCode,
                            ShipOutWarehouse = item.YewuWarehouseCode,

                            SkuContainers = delivery.GroupBy(g => g.ContainerCode).Select(container =>
                            {
                                var containerLine = container.FirstOrDefault();
                                return new LogisticsDeliveryShipOutCustomerAsnContainerRequest
                                {
                                    ContainerId = containerLine.ContainerCode,
                                    customerOrderType = TMS.Message.Common.CutomerOrderType.First,
                                    TargetWarehouseCode = containerLine.TargetWarehouseCode,
                                    CustomerAsnId = containerLine.CustomerAsnId,
                                    PalletId = containerLine.PalletId,
                                    Weight = new Weight { Value = containerLine.Weight, Unit = WeightUnit.G },
                                    Size = new Packing() { Length = containerLine.Length, Width = containerLine.Width, Height = containerLine.Height, Unit = LengthUnit.CM },

                                    Lines = container.GroupBy(l => l.SKU).Select(line =>
                                    {
                                        return new LogisticsDeliveryShipOutCustomerAsnContainerLineRequest
                                        {
                                            SKU = line.Key,
                                            Quantity = line.Sum(s => s.PackingQty),
                                            AccountNo = line.FirstOrDefault().CustomerCode
                                        };
                                    }).ToList(),

                                    Bags = container.Where(p => p.BagCode.Length > 0).GroupBy(g => g.BagCode).Select(bag =>
                                    {
                                        var bagid = bag.Key;
                                        return new LogisticsDeliveryShipOutCustomerAsnContainerBagRequest
                                        {
                                            BagId = bagid,
                                            Lines = bag.Select(bagline => new LogisticsDeliveryShipOutCustomerAsnContainerBagLineRequest
                                            {
                                                SKU = bagline.SKU,
                                                Quantity = bagline.PackingQty,
                                                AccountNo = bag.FirstOrDefault().CustomerCode
                                            }).ToList()
                                        };
                                    }).ToList()
                                };
                            }).ToList(),
                            OperateBy = item.CreateBy,
                            OperateOn = item.CreateOn
                        };

                        return yewuRequest;
                    }).ToList();

 

posted @ 2016-10-10 11:01  Aleax  阅读(771)  评论(0编辑  收藏  举报