繁体   English   中英

使用存在的EF查询会抛出内存不足异常

[英]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.

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