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 でないスタックを除外する必要があります。