我正在处理一个我无法在 ef core 3.0 上工作的查询,它在 2.1 版本中运行良好,我想知道是否有人可以帮助我弄清楚如何让它在 3.0 版本中工作。
所以让我从挑战开始。
我有一个名为 Zone 的表,它与名为 Bin 的表具有一对多的关系,而 bin 与名为 BinItems 的表具有一对多的关系,而 BinItem 与名为 PlanItem 的表具有一对一的关系, PlanItem 与名为 Plan 的表具有一对一的关系。
所以我想获取计划表中所有计划的列表,但它必须满足计划项目在指定区域列表的区域中的条件。所以假设我有一个 ZoneIds 列表,我正在寻找他们相关的 bin 项目位于该区域内的所有计划。
所以这是我在 2.1 版本中使用的查询,并且一直工作到迁移到 3.0。
var filterQuery = _PlanRepository.Table;
filterQuery = filterQuery.Where(x => x.Items.Where(o => o.BinItem != null
&& o.BinItem.Bin != null
&& o.BinItem.Bin.Zone != null)
.Select(y => y.BinItem.Bin.Zone.Id)
.Intersect(PlanFilter.WarehouseIds).Any());
var finalQuery = filterQuery
.Include(x => x.Items)
.ThenInclude(x => x.BinItem)
.ThenInclude(x => x.Bin)
.ThenInclude(x => x.Zone)
.AsQueryable();
现在这给了我一个类似下面的错误。
Zone, "Id") != null), selector: (y) => y.BinItem.Bin.Zone.Id), source2: (Unhandled parameter: __PlanFilter_WarehouseIds_0))' by 'NavigationExpandingExpressionVisitor' 失败。这可能表示 EF Core 中的错误或限制。看https://go.microsoft.com/fwlink/?linkid=2101433了解更多详细信息。在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.ExpandNavigationsInExpression(NavigationExpansionExpression 源,表达式表达式)在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.ProcessWhere(NavigationExpansionExpression 源,LambdaExpression 谓词)
谁能分享我如何让它在 Ef core 3.0 版本中工作?