如何在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
相关产品推荐
相关产品推荐

