![](/img/trans.png)
[英].net core 6 - Entity Framework - when to use AsEnumerable AsQueryable
[英]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.