c# - Entity Framework Core 6(预览版)迫使我使用 .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;
//...
}
推荐阅读
- python - Tensorflow 2.1.0 错误,模块“tensorflow”没有属性“GraphKeys”
- node.js - 我的 https 请求做错了什么?
- c# - My resource dictionary is omitting my label from being showed
- c# - How to read validation error message when fail validation logic for passwords
- reactjs - 在 docusaurus 页面中导入 javascript 模块
- javascript - 如何使用 doxygraph?
- c# - 从 appsettings.json 获取值
- javascript - how to focus / blur event on button list react native
- spring-boot - 来自第三个 API 的 Spring Boot 安全认证
- javascript - Sending data from Chrome extension to local python file