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

如何在AutoMapper映射时过滤Visible为false的BusinessType记录?

AutoMapper映射时过滤Visible为false的记录

针对你的需求,有几种可行的实现方式,根据场景选择即可:

1. 提前过滤集合再映射(最直观推荐)

直接先从数据源中筛选出Visible = true的BusinessType记录,再执行映射操作,逻辑简单清晰:

// 假设businessList是你的BusinessType集合数据源
var businessList = GetBusinessTypeList();
var apiTypeList = _mapper.Map<List<ApiType>>(businessList.Where(item => item.Visible));

注:AutoMapper默认会自动映射同名属性(比如ID、Value),你之前写的显式ForMember其实可以省略,简化基础映射配置:

cfg.CreateMap<BusinessType, ApiType>();

2. 结合Queryable投影过滤(适用于EF等ORM场景)

如果你的数据源是IQueryable(比如Entity Framework的DbSet<BusinessType>),可以用AutoMapper的ProjectTo方法直接在查询阶段完成过滤和投影,减少内存开销:

var apiTypeList = dbContext.BusinessTypes
    .Where(item => item.Visible)
    .ProjectTo<ApiType>(_mapper.ConfigurationProvider)
    .ToList();

3. 将过滤逻辑封装到AutoMapper配置中

如果希望把过滤逻辑统一放到AutoMapper配置里,避免重复编写过滤条件,可以自定义集合类型的映射:

// 基础类型映射
cfg.CreateMap<BusinessType, ApiType>();

// 配置List<BusinessType>到List<ApiType>的映射,内置过滤逻辑
cfg.CreateMap<List<BusinessType>, List<ApiType>>()
    .ConvertUsing((source, destination, context) =>
        source.Where(item => item.Visible)
              .Select(item => context.Mapper.Map<ApiType>(item))
              .ToList());

之后直接映射整个集合时,会自动过滤掉Visible = false的记录:

var apiTypeList = _mapper.Map<List<ApiType>>(businessList);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:18:25