簡體   English   中英

Entity Framework 6,從具有許多指向其他表的鏈接的大表中獲取過濾數據的最佳策略

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

以下哪種方式更好:

  1. 對與許多其他表鏈接的表執行 10000 個帶有過濾條件的小查詢(我們也需要鏈接表中的數據(LINQ 表達式中的 doing.include()))或;
  2. 要在沒有任何條件的情況下逐個從表和鏈接表中獲取數據(在循環中,在 10 次迭代中 => 10 次對 db 的查詢),將它們加載到集合中,然后在每次迭代期間執行 LINQ 與集合的所有分析工作?

我認為第二種方式會更快,但是 memory 呢?如何根據干凈架構的規則解決這個問題?

這兩種解決問題的方法看起來都不合適。 如果你突然陷入和我一樣的境地,讓我們呼氣,喝茶,去公園散步。

然后嘗試從頭重寫算法。 幾乎可以肯定,您可以將其分為兩部分:

首先,對 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 進行多一次查詢來獲取必要的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM