[英]EF query using exists throws outofmemory exception
我试图获取Shop_Orders
的列表, Shop_Orders
列表中的order_num
值在名为WarhouseOrder
的表中不存在。 该表包含50万条记录,并且在OrderNo
上有一个索引。 List<Shop_Order>
包含大约150个项目,每个项目都有一个order_num
。 当执行此代码时,它看起来效率非常低,缓慢,并导致内存不足异常。 有一个更好的方法吗?
List<Shop_Order> new_orders = (from a in osource.order
where !ctx.WarehouseOrders.ToList()
.Exists(o => o.OrderNo == a.order_num) select a).ToList();
WarehouseOrders.ToList()
将所有仓库订单下载到内存中。 如果要使用Queryable.Any
在数据库端检查条件,则至少可以避免这种情况:
!ctx.WarehouseOrders.Any(o => o.OrderNo == a.order_num)
但这将对每个车间订单进行数据库查询。 我假设您可以通过单个数据库查询获得所需的车间订单。 例如,您可以使用仓库订单对加入车间的订单进行分组,并仅选择不匹配的订单。 就像是:
from so in ctx.ShopOrders
join wo in ctx.WarehouseOrders on so.order_num equals wo.OrderNo into g
where !g.Any()
select so
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.