如何解决EF Core Linq表达式无法翻译
例如,当我针对可为空的Guid属性进行过滤时,我遇到了EF Core查询问题
public class Order
{
public Guid? MachineId {get;set;}
}
我正在尝试根据MachineId
的列表过滤订单
var machineIds // a list of Guids
var orders = _context.Orders.Where(x => machineIds.Contains(x.MachineId.GetValueOrDefault()));
我得到的错误是
System.InvalidOperationException : The LINQ expression 'DbSet<Orders>
.Where(x => __machineIds_0
.Contains(m.MachineId.GetValueOrDefault()))' could not be translated. Either rewrite the query in a form that can be translated,or switch to client evaluation explicitly by inserting a call to either AsEnumerable(),AsAsyncEnumerable(),ToList(),or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
我不确定如何以其他方式表达此查询-有人可以帮忙吗?
解决方法
将Guid列表转换为可为空的Guid列表即可解决此问题(感谢mjwills)。
var machineIds = machines
.Select(x => new Guid?(x.Id));
EF Core查询变为
var orders = _context.Orders.Where(x => machineIds.Contains(x.MachineId));
,
我建议您删除.GetValueOrDefault()
的使用,并将machineIds设为可为空的guid(而不是guid)列表。
这看起来像:
var machineIds = new List<Guid?>();
var orders = _context.Orders.Where(x => machineIds.Contains(x.MachineId));
,
_context.Orders.Where(order => MachineIds.Where(Id => Id == order.MachineId).Any())
这未经测试。可能需要修改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。