我已将我的 Web 应用程序升级到 NET Core 3,并且一些在 NET Core 2 中正确返回值的 EF LINQ 查询现在出错了。我的 OrderManager 类中有以下代码:
private TResult GetOrder<TResult>(Func<Order, bool> condition, Func<Order, TResult> selector)
{
return _context.Orders
.Where(x => condition(x))
.Include(x => x.OrderStocks)
.ThenInclude(x => x.Stock)
.ThenInclude(x => x.Product)
.Select(selector).FirstOrDefault();
}
public TResult GetOrderById<TResult>(int id, Func<Order, TResult> selector)
{
return GetOrder(order => order.Id == id, selector);
}
public TResult GetOrderByReference<TResult>(string reference, Func<Order, TResult> selector)
{
return GetOrder(x => x.OrderRef == reference, selector);
}
看起来 dotnet 3 不喜欢那个 .Where 语句:
System.InvalidOperationException:“无法翻译 LINQ 表达式 'DbSet .Where(o => Invoke(__condition_0, o[Order]) )”。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
有谁知道如何正确重写此查询?我试图在行中添加 AsEnumerable():return _context.Orders 但这不是解决方法,我在这里有点受阻,因为我不是 LINQ 专家。