在LINQ中筛选项目列表
本文关键字:项目 列表 筛选 LINQ | 更新日期: 2023-09-27 18:08:31
我正在使用MediatR请求一个visualizationDto
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的堆栈。
Where条件只对栈执行,对lq不执行。试试stacks.ProjectTo<LevelDto>()
,应该可以。