我正在使用
.NET核心7
和
实体框架核心7.0.13
和
AutoMapper 12.0.3
我有以下疑问:
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);
我的问题是
.Where
子句未被应用。经过一些尝试,我意识到如果我添加
.ToList()
在查询结束时,在我使用
.AsQueryable()
要作为参数传递给映射程序
哪里
这个条款很好用。为什么会发生这种情况?我不能用
.ToList()
因为它选择了我正在查询的类的所有属性。
经过多次尝试,我意识到我的查询是可以的,我的问题在.ProjectTo()内部。
例如,如果我传递了一些不应该返回的论点
机器操作
,查询实际上没有返回任何内容,这是可以的,但当查询的结果通过
.ProjectTo
,它神奇地找到了一些唱片并把它带给我。这对我来说真的没有任何意义。
查询结果:
.ProjectTo()的结果:
MachineScheduleDataDto类:
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; }
}
我的映射器:
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));