2

我正在使用 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 为空的堆栈。

4

1 回答 1

0

Where 条件只执行到堆栈而不是 lq。试试stacks.ProjectTo<LevelDto>(),这应该可以解决问题。

于 2016-09-28T15:40:47.043 回答