如何优化Linq实现Ticket列表映射?寻求更优实现方案
优化方案:用LINQ链式调用简化实现
嘿,你的现有代码完全能实现需求,但我们可以利用LINQ的链式调用特性,把代码变得更简洁、更符合声明式编程风格,同时去掉手动的foreach循环和临时列表的手动维护。
优化后的代码如下:
List<Ticket> results = lines .GroupBy(x => x.TicketNumber) .Select(group => new Ticket { TicketLines = group.Select(g => new TicketLine { TicketNumber = g.TicketNumber, TicketItem = g.TicketItem, Qty = g.Qty, ProductNumber = g.ProductNumber }).ToList() }) .ToList();
优化点说明:
- 去掉了手动创建的
results临时列表和foreach循环中的Add操作,直接通过ToList()把LINQ查询的结果转换为最终的List<Ticket> - 代码逻辑更紧凑,把分组、转换Ticket对象、转换TicketLine对象的逻辑整合在一条LINQ链中,可读性更强
- 保持了原代码的所有功能:按
TicketNumber分组,每个分组对应一个Ticket,分组内的每条数据对应一个TicketLine
这个实现和你原来的代码功能完全一致,但代码量更少,也更符合C#中LINQ的惯用写法。
内容的提问来源于stack exchange,提问作者Lukasz Pomianowski
相关产品推荐
相关产品推荐

