繁体   English   中英

Entity Framework Core 6(预览版)强制我使用 .AsEnumerable()

[英]Entity Framework Core 6 (preview) forces me to use .AsEnumerable()

我已在我的项目中从 .net5 更新到 .net6 预览版,但我遇到了 Entity Framework Core 问题。

这些查询在 EF Core 5 中运行良好,但是,它们迫使我执行.AsEnumerable()以在 EF Core 6 中工作,它使用的内存是以前使用的内存的两倍。 看起来应该可以做到(特别是因为它在 EF Core 5 中运行良好),也许我应该配置一些不同的东西才能进行这些查询?

var _data1 = _dbContext.Dataset1
                       .Where(f => f.PostedDate >= DateSince && f.PostedDate <= DateUntil)
                       .AsEnumerable();

var _orders = _dbContext.Orders
                        .Where(o => _data1.Select(f => f.OrderID).Contains(o.OrderID))
                        .AsEnumerable();

var _itms = _dbContext.Items
                      .Where(i => _orders.Select(o => o.OrderID).Contains(i.OrderId))
                      .AsEnumerable();

foreach(var order in _orders )
{
    var itms  = _itms?.Where(i => i.OrderId == order.OrderID);
    //...
}

更新:这是在没有 .AsEnumerable() 的情况下抛出的异常

LINQ 表达式 'DbSet() .Where(o => DbSet() .Where(f => f.PostedDate >= __DateSince_0 && f.PostedDate <= __DateUntil_1) .Select(f => f.OrderID) .Contains(o .OrderID))' 无法翻译。
以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用,显式切换到客户端评估。 有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

您应该能够通过使用导航属性并将结果组合在一起来解决此问题,这样您最终只会得到一个 LINQ 查询。

var _groupedItems = _dbContext.Items
                              .Includes(i => i.Order)
                              .ThenIncludes(o => o.Dataset1)
                              .Where(f => f.Order.Dataset1.PostedDate >= DateSince && f.Order.Dataset1.PostedDate <= DateUntil)
                              .GroupBy(i => i.Order)
                              .Select(g => new
                              {
                                  Order = g.Key,
                                  Items = g.ToList()
                              });

foreach(var itemGroup in _groupedItems)
{
    var itms  = itemGroup.Items;
    //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM