.net core 如何在EF Core 3.1中使用Join

.net core 如何在EF Core 3.1中使用Join,.net-core,entity-framework-core,.net Core,Entity Framework Core,在我使用Join之前,代码工作正常 //Works Fine var ordersNotInvoiced = await APIMiscOrdersDbContext.Order.Where(o => o.InvoiceDate == null).Select(o => o.OrderNumber).ToListAsync(); //Works Fine var latestOrders

在我使用Join之前,代码工作正常

            //Works Fine
            var ordersNotInvoiced = await APIMiscOrdersDbContext.Order.Where(o => o.InvoiceDate == null).Select(o => o.OrderNumber).ToListAsync();

            //Works Fine
            var latestOrdersVersionAction = await APIMiscOrdersDbContext.OrderVersionAction
                .Where(ova => ordersNotInvoiced.Contains(ova.OrderVersion.OrderNumber))
                .GroupBy(ova => ova.OrderVersion.OrderNumber)
                .Select(ova => new { OrderNumber = ova.Key, ActionDateTime = ova.Max(g => g.ActionDateTime) }).ToListAsync();

            // Unable to Run this With Join
            var processedOrderVersionActions = await APIMiscOrdersDbContext.OrderVersionAction.Join(latestOrdersVersionAction,
                l => new { l1 = l.OrderVersion.OrderNumber, l2 = l.ActionDateTime },
                r => new { l1 = r.OrderNumber, l2 = r.ActionDateTime },
                (l, r) => l).ToListAsync();
如果我从最后一条语句中删除wait,但说“Result Not Computed”(结果尚未计算),则代码将运行
你知道如何解决这个问题吗?

我想你遇到了这样的问题:

您正在使用内存中的数据连接SQL表,这是不可能的。要么在SQL中执行全部联接,要么在本地获取所有数据,然后执行联接


也就是说,我认为如果您将
latestOrdersVersionAction
与您的加入相结合,您可能会获得更好的结果,因为它将全部转换为sql查询,并将在服务器上执行。

如果您使用wait,它会在某个时候完成吗?即使需要很长时间?您是否有任何异常?如果您使用ToList而不是ToListSync来测试会怎么样?@Sommen如果使用ToList()System.InvalidOperationException:处理LINQ表达式“DbSet.Join”(外部:u p_0,内部:l=>new{l1=l.OrderVersion.OrderNumber,l2=l.ActionDateTime},outerKeySelector:r=>new{l1=r.OrderNumber,l2=r.ActionDateTime},innerKeySelector:(l,r)=>l)'by'NavigationExpandingExpressionVisitor'失败。这可能表明EF Core中存在错误或限制。您是否尝试使用linq语法?例如,
从…加入…选择…
@Ackdari是的,我已在查询语法中翻译了相同的代码,但在EF Core 3.0或更高版本中得到了相同的错误客户端linq查询不再在t上进行计算他是客户