Entity Framework 6,从具有许多指向其他 table 的链接的大 table 中获取过滤数据的最佳策略

Entity Framework 6, best strategy to get filtered data from big table with many links to other tables

以下哪种方式更好:

  1. 执行 10000 个带有过滤条件的小查询 table 与许多其他 table 链接(我们也需要来自链接 table 的数据(在 LINQ 中执行 .include()表达式)) 或;
  2. 从 table 获取数据并在没有任何条件的情况下逐个链接 table(在循环中,在 10 次迭代中 => 10 次查询到数据库),将它们加载到一个collection,然后在每次迭代期间通过 LINQ with collection?
  3. 执行所有分析工作

我认为第二种方法会更快,但是内存如何以及如何根据干净架构的规则解决这个问题?

这两种解决问题的方法看起来都不合适。 如果你突然遇到和我一样的情况,我们就喘口气,喝杯茶,去公园散散步。

然后尝试从头重写算法。几乎可以肯定,您可以将其分为两部分:

首先,查询 db 以筛选出您将与之进一步合作的客户。 这可能看起来像:

var outdatedClients = db.Clients.Where(client => client.Orders.Any(order => order.Date < DateTime.Now.AddDays(-client.Term));

然后使用 foreach (var client in outdatedClients){},您可以在必要时使用 .include() 处理过时的订单。在大多数情况下,您甚至可以避免此循环并通过再查询一次 db 来获取必要的数据。