2

MediatR を使用して、視覚化Dto を要求しています

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()

しかし、私が受け取る値はフィルタリングされたものではなく、完全なデータセットです。でフィルタリングする他の方法はありますProjectToListか?

今、私は次のような出力を持っています

List<LevelDto>
-List<BufferDto>
  -List<StackLocationDto>
    -stack timeIn- TimeOut
    -stack timeIn- TimeOut
    -stack timeIn- null
    -stack timeIn- null

既に終了しているスタックを除外して、TimeOut が null でないスタックを除外する必要があります。

4

1 に答える 1