You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AutoMapper中对订单列表项实现已开票条件映射?

解决方案

你只需要在OrderDto到Order的映射配置里,给OrderItems的MapFrom添加LINQ过滤逻辑,筛选出符合条件的OrderLine即可,具体修改如下:

CreateMap<OrderDto, Order>()
        .ForMember(dest => dest.TransactionId, opt => opt.MapFrom(src => CreateTransactionId(src.OrderHeader)))
        .ForMember(dest => dest.TransactionType, opt => opt.MapFrom(src => MapTransactionType(src.OrderHeader.OrderType)))
        // 新增过滤逻辑:仅保留包含'Invoiced'类型数量记录的OrderLine
        .ForMember(dest => dest.OrderItems, opt => opt.MapFrom(src => 
            src.OrderLine.Where(line => line.Quantity.Any(q => q.Type == "Invoiced"))
        ))
        .ReverseMap();

CreateMap<OrderLineDto, OrderItem>()
        .ForMember(dest => dest.LineNumber, opt => opt.MapFrom(src => src.LineNumber))
        .ForMember(dest => dest.Upc, opt => opt.MapFrom(src => src.Item.Upc))
        .ForMember(dest => dest.Sku, opt => opt.MapFrom(src => src.Item.Upc))
        .ReverseMap();

说明

  • 通过LINQ的Where方法对原列表src.OrderLine做筛选,内部用Any方法检查当前OrderLine的Quantity集合中是否存在Type为'Invoiced'的条目
  • 该逻辑直接嵌入MapFrom中,AutoMapper会自动将筛选后的列表映射为OrderItems,无需额外修改OrderLineDto到OrderItem的单条映射规则(除非你还需要对单个订单项的字段做条件过滤)

内容的提问来源于stack exchange,提问作者ChrisP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:53:07