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

如何使用AutoMapper映射集合对象 替换foreach循环设置OwnerData的逻辑

使用AutoMapper替换foreach实现Car集合OwnerData批量赋值

步骤1:配置AutoMapper映射规则

自定义映射Profile类,配置同类型映射规则,支持外部传入Owner实例为Car的OwnerData属性赋值:

using AutoMapper;

public class CarProfile : Profile
{
    public CarProfile()
    {
        // 配置Owner到Owner的映射,忽略不需要赋值的Id字段
        CreateMap<Owner, Owner>()
            .ForMember(dest => dest.Id, opt => opt.Ignore());

        // 配置Car到Car的映射,保留原Car的Id、Name属性不覆盖
        CreateMap<Car, Car>()
            .ForMember(dest => dest.Id, opt => opt.Ignore())
            .ForMember(dest => dest.Name, opt => opt.Ignore())
            // 从映射参数中获取外部传入的Owner实例,赋值给OwnerData
            .ForMember(dest => dest.OwnerData, opt => opt.MapFrom((src, dest, destMember, context) =>
            {
                var owner = (Owner)context.Items["OwnerInfo"];
                return context.Mapper.Map<Owner>(owner);
            }));
    }
}

步骤2:初始化AutoMapper

ASP.NET Core 依赖注入环境

在Program.cs中注册AutoMapper服务:

builder.Services.AddAutoMapper(typeof(CarProfile));

之后在业务类中通过构造函数注入IMapper接口即可使用。

非依赖注入环境

手动构造Mapper实例:

var config = new MapperConfiguration(cfg => cfg.AddProfile<CarProfile>());
var mapper = config.CreateMapper();

步骤3:替换原有foreach逻辑

直接调用AutoMapper的集合映射方法,传入查询到的cars集合和ownerData参数,自动完成批量赋值:

Owner ownerData = repository.Get<Owner>(id);
IEnumerable<Car> cars = repository.Get<Car>();

// 批量映射替换整段foreach逻辑
var data = _mapper.Map<IEnumerable<Car>>(cars, opt =>
{
    opt.Items["OwnerInfo"] = ownerData;
});

如果你不需要自动适配Owner新增字段,也可以直接在映射规则里硬编码赋值三个字段,效果和原foreach完全一致:

CreateMap<Car, Car>()
    .ForMember(dest => dest.Id, opt => opt.Ignore())
    .ForMember(dest => dest.Name, opt => opt.Ignore())
    .ForMember(dest => dest.OwnerData, opt => opt.MapFrom((src, dest, destMember, context) =>
    {
        var owner = (Owner)context.Items["OwnerInfo"];
        return new Owner
        {
            CarName = owner.CarName,
            Name = owner.Name,
            Phone = owner.Phone
        };
    }));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03