在可空导航属性上过滤时,实体框架中转换为 SQL 失败错误

问题描述 投票:0回答:1

ef core 存在问题,无法转换可空导航属性的条件

我正在为端点编写过滤器,并注意到一些奇怪的事情。

            var employeeOnServices = await _context.ServiceRecords
                .Where(x=>x.Employees != null)
                .Where(x=> x.Status == ServiceStatusEnum.InProgress
                          || x.Status == ServiceStatusEnum.OnHold)
                .Select(x =>x.Employees.Select(y=>y.Id))
                .ToListAsync(cancellationToken);

当我运行上面的代码片段时,当我删除时,我得到翻译为sql失败的错误

.Where(x=>x.Employees != null)

代码工作正常。员工与 ServiceRecords 表有多对多的关系,但据我所知,他们的类上的关系可以为空。

谢谢你

c# .net entity-framework linq
1个回答
0
投票

集合导航应始终不可为空。通过查看它是否为空集合,您应该能够实现您想要的目标:

        var employeeOnServices = await _context.ServiceRecords
            .Where(x=>x.Employees.Any())
            .Where(x=> x.Status == ServiceStatusEnum.InProgress
                      || x.Status == ServiceStatusEnum.OnHold)
            .Select(x =>x.Employees.Select(y=>y.Id))
            .ToListAsync(cancellationToken);
© www.soinside.com 2019 - 2024. All rights reserved.