EF Core查询Where子句仅在.ToList()后生效,AutoMapper ProjectTo异常
EF Core 7 结合 AutoMapper ProjectTo 时过滤条件失效问题
环境信息
- .NET Core 7
- Entity Framework Core 7.0.13
问题场景与代码
我编写了以下EF Core查询,用于筛选符合时间条件的MachineSchedule及其关联的MachineOperations数据:
var test = _context.Set<T> .AsNoTracking() .Include(m => m.MachineOperations! .Where(m => m.InsertedAt.Date <= endDate.Date && m.EndTime <= endDate.TimeOfDay && m.InsertedAt.Date >= startDate.Date && m.StartTime >= startDate.TimeOfDay)) .ThenInclude(m => m.EggQuantities) .Where(m => diffDays.Contains(m.WeekDay) && m.MachineOperations!.Any() && m.InitialProductionTime <= startDate.TimeOfDay && m.FinalProductionTime >= startDate.TimeOfDay); var test2 = _mapper.ProjectTo<MachineScheduleDataDto>(test);
问题描述
单独执行test查询时结果符合预期,但通过AutoMapper的ProjectTo转换为DTO后,原本应该返回无MachineOperation记录的场景却返回了数据,Where子句的过滤效果失效。
尝试在查询末尾添加.ToList()再转为AsQueryable传入ProjectTo,此时过滤能正常工作,但这种方式会加载实体的所有属性,无法满足性能需求。
相关定义
DTO类
public record MachineScheduleDataDto { public required ICollection<MachineOperationDto> MachineOperationsDto { get; set; } } public record MachineOperationDto { public int MachineOperationId { get; set; } public EMachineStatus MachineStatus { get; set; } public virtual required MachineScheduleDataDto MachineScheduleDto { get; set; } }
AutoMapper映射配置
CreateMap<MachineSchedule, MachineScheduleDataDto>() .ForMember(p => p.MachineOperationsDto, opts => opts.MapFrom(m => m.MachineOperations)); CreateMap<MachineOperation, MachineOperationDto>() .ForMember(p => p.MachineScheduleDto, opts => opts.MapFrom(m => m.MachineSchedule));
内容的提问来源于stack exchange,提问作者guirms
相关产品推荐
相关产品推荐

