二段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 > ).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();
二段Linq Groupby操作的更多相关文章
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
- Linq查询操作之排序操作
在Linq中排序操作可以按照一个或多个关键字对序列进行排序.其中第一个排序关键字为主要关键字,第二个排序关键字为次要关键字.Linq排序操作共包含以下5个基本的操作. 1.OrderBy操作,根据排序 ...
- Linq 数据库操作(增删改查)
Linq数据库增删改查 Linq是一种查询语言,集成包含在formwork中,包含在C#语言中,它的作用是降低查询的门槛,提高开发效率,是我们必须掌握的技术之一,下面是我自己对linq数据库操作的方法 ...
- Linq 集合操作
Linq 集合操作 演示代码 两个对象一个是Person,一个Address, AddressId是外键, public class Person { public string ID { get; ...
- 聊聊flink Table的groupBy操作
本文主要研究一下flink Table的groupBy操作 Table.groupBy flink-table_2.11-1.7.0-sources.jar!/org/apache/flink/tab ...
- Linq集合操作之Intersect,Except,Union源码分析
Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...
- Linq限定操作之All,Any,Contains源码分析
Linq限定操作之All,Any,Contains源码分析 linq的限定操作 常见的限定操作: All,Any,Contains 一:All 1. 解释: 确定序列中的所有元素是否满足条件. 从字面 ...
- Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
- Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析 Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化 ...
随机推荐
- 面试总结之Linux/Shell
Linux Linux cshrc文件作用 Linux如何起进程/查看进程/杀进程 Linux 文件755 代表什么权限 Linux辅助线程 Linux进程间通信方法 pipeline,msgq... ...
- 深入浅出 Java Concurrency (6): 锁机制 part 1 Lock与ReentrantLock
前面的章节主要谈谈原子操作,至于与原子操作一些相关的问题或者说陷阱就放到最后的总结篇来整体说明.从这一章开始花少量的篇幅谈谈锁机制. 上一个章节中谈到了锁机制,并且针对于原子操作谈了一些相关的概念 ...
- 「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
转自:https://idig8.com/2018/09/21/xiaochengxujavashizhanxiaochengxuyemiandeshanglaxialashuaxin49/ 之前已经 ...
- delphi 实体类 JSON 数组
delphi 实体类 与JSON转换,序列化 TJson REST.JSON.pas TJson.JsonToObjectTJson.ObjectToJsonString JsonEncode O ...
- 怎么改变Eclipse中项目的运行服务器
eclipse中-->选定项目-->右键-->弹出 Properties for项目名 -->选择server子项-->选择需要的server即可(Always use ...
- js中创建table表格
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- C语言高级程序设计——进制算法以及位算符号
语言不够官方:意会: 数据储存运算是以二进制的,二进制数有原码 反码 补码三种.通常所说的二进制就是原码.(语言不官方) 原码 :4的原码可以为:0000 0100:最高位0 可以为符号数 反码:正数 ...
- protobuf's custom-options
[protobuf's custom-options] protobuf可以设置属性,就像__attribute__可以给函数设置属性一样,protobuf更牛的是可以设置自定义属性.实际就是属性对象 ...
- php 共享内存学习(shmop函数)
问题:希望可以在进程间共享变量,为共享数据提供快速访问 解决方案:除了可以使用APC模块,还可以用shmop或System V共享内存 //创建键 //将一个可访问的文件路径名转换为一个可供 shmo ...
- Rabbitmq的几种交换机模式
Rabbitmq的核心概念(如下图所示):有虚拟主机.交换机.队列.绑定: 交换机可以理解成具有路由表的路由程序,仅此而已.每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字 ...