2009-01-10 81 views
1

我有表的關聯,如(CaseClient是一個橋接表):如何查詢(LINQ)多表關聯鏈接?

  • 案例有很多CaseClients
  • 客戶端有很多CaseClients
  • ClientType有許多CaseClient

最簡單的方法只是使用數據庫中的視圖,但我聽說與linq你可以加入這個莫名其妙?或者我應該只是在數據庫中創建視圖,LINQ查詢再次顯示該視圖?

我感謝您的評論

回答

1

我想你想使用的加入方法,從你的橋接表和解決您的每一個關係。例如。

// Where CaseId and TypeId are your members of CaseClient 
var x = caseClients.Join(cases, cc => cc.CaseId, c => c.Id) 
           .Join(types, cc => cc.TypeId, t => t.Id) 
           .Select(); 

以上代碼未測試(到目前爲止)和從存儲器。您可能需要在兩個連接之間加入一個選擇。

+0

的。選擇是不必要的(也許錯了,如果我沒有記錯),除非你有提取聯接的列的某個子集選擇功能。 – tvanfosson 2009-01-10 12:09:57

0

繼承人改編了我爲非常類似的情況所做的工作。只有名稱已被更改,以保護無辜。

IEnumerable<Case> getCaseByClient(int client_id) 
{ 
    var ret = from c in Cases 
       join cc in CasesClients 
       on c.Id equals cc.ClientId 
       join cl in Clients 
       on cc.ClientId equals client_id 
       select c; 
    return ret; 
} 

當然,這裏假設你的client_id字段是一個int,但這很容易修改。