实体框架核心6(预览)迫使我使用.asenumerable()



我已经在我的项目中从。net5更新到。net6预览版,我遇到了实体框架核心的问题。

这些查询在EF Core 5中工作得很好,但是,它们迫使我在EF Core 6中做.AsEnumerable()工作,它使用的内存是以前使用的两倍。看起来应该是可以做到的(特别是因为它在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() '其中(o =比;DbSet ()其中(f =比;f.p posteddate>= __DateSince_0 &&f.PostedDate <= __DateUntil_1).Select (f =比;f.OrderID). contains (. 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;
//...
}

最新更新