我正在使用 MediatR 请求 AvisualizationDto
public VisualizationResponse Handle(VisualizationQuery message)
{
return new VisualizationResponse
{
LoadTick = DateTime.Now.Ticks,
Visualization = new VisualizationDto
{
infeed = context.Unloaders.ProjectToList<InfeedDto>(),
Levels = context.Levels.ProjectToList<LevelDto>()
}
};
}
这些直接从DbContext
. 现在的问题是ProjectToList<>
递归映射。在关卡中有一个缓冲区列表,在每个缓冲区中都有一个堆栈列表。现在我只需要映射 TimeOut 值为 null 的堆栈。我不想在映射后过滤所有内容,因为这可能会减慢速度。我试过了
var lq = context.Levels;
var stacks = lq
.SelectMany(l => l.Buffers)
.SelectMany(b => b.StackLocations)
.Where(s => s.TimeOut == null);
Levels = lq.ProjectTo<LevelDto>().Select(l => new {l, stacks}).ToList().Select(x => x.l).ToList()
但是我收到的值不是过滤后的值,仍然是完整的数据集。有没有其他方法可以过滤 a ProjectToList
?
现在我有一个看起来像的输出
List<LevelDto>
-List<BufferDto>
-List<StackLocationDto>
-stack timeIn- TimeOut
-stack timeIn- TimeOut
-stack timeIn- null
-stack timeIn- null
我需要过滤掉已经完成的堆栈,以便那些没有 TimeOut 为空的堆栈。