2013-01-11 29 views
2

我有一個包含兩個(相關)表的數據庫:ActionsDocuments,並使用LINQ查詢它。是否可以在單個查詢中遵循一系列外鍵引用?

動作指向其輸入文檔和文檔指向創建它的動作,因此Action.DocumentDocument.SourceAction

通過追溯這些關係,我們得到了一個交替操作和文檔的處理鏈。

Final Document-> Last Action-> Middle Document-> First Action-> Source Document 

當文檔沒有源操作時,它是原始源文檔。

我使用LINQPad以下查詢聚集在這樣一個鏈中的所有行動並將其輸出:

var actions = new List<LINQPad.User.Action>(); 
var action = Actions.Where(a => a.Id == 1240).First(); 
while (action != null) { 
    actions.Add(action); 
    action = action.Document != null ? action.Document.SourceAction : null; 
} 
actions.Dump(); 

此查詢工作正常,但它當然激發了每一個動作一個SQL查詢。

有沒有辦法在單個LINQ查詢中獲取所有這些操作?

+1

感謝您的鏈接,那裏肯定有有趣的東西(和鏈接)。我一直在尋找「鏈條」和「痕跡」,但從未想到這可能是一個「層次結構」。 –

回答

2

只有在將所有數據拉入內存時,纔可以在單個查詢中執行此操作。否則,你應該做很多的查詢。

+2

謝謝。我希望能夠阻止這些多重查詢。但是這個表格往往會增長到數百萬條記錄,因此加載它也可能是不需要的。我想我總是可以根據動作數量的初始計數來選擇策略。 –

相關問題