2010-02-05 60 views
1

我有以下模式:的EntityFramework - LINQ加入幫助

客戶 - 客戶端Id 用戶 - 用戶ID 辦事處 - OfficeId

ClientOffices - 客戶端Id,OfficeId UserOffices - UserId,OfficeId

加粗實體是EntityFramework實體。

現在我需要編寫一個接受UserId的函數並返回一個客戶端列表 - 它們也屬於用戶所屬的辦公室。 Say ABC Inc.與倫敦辦公室合作,XYZ Inc.與紐約辦公室合作。 用戶「Yakoon」僅適用於Lond Office。

在執行時應該只返回ABC公司 如果「Yakoon」屬於紐約辦事處爲好,那麼它應該返回BTOH ABC和XYZ公司的LINQ聲明

感謝

回答

2

實體框架等效的方法是這樣的:

public IEnumerable<Client> GetClientsForUser(int id) 
{ 
    return (from u in objectContext.Users 
      where u.UserId == id 
      from o in u.Offices 
      from c in o.Clients 
      select c); 

} 

請確保您的UserOffices和ClientOffices表上有主鍵,以便EF將它們識別爲聯結表。

+0

感謝您的大力幫助......按預期工作! – effkay 2010-02-05 13:31:05

1

這個怎麼樣:

public IEnumerable<Client> GetClientsForUser(int id) 
{ 
    return (from u in userOffices 
    where u.UserId == id 
    join o in clientOffices on u.OfficeId equals o.OfficeId 
    join c in clients on o.ClientId equals c.ClientId 
    select c); 
} 
+0

thx ..但o在VS中沒有被識別....讓我想一下這些行; – effkay 2010-02-05 09:58:01

+0

快速測試後立即更新,應該立即開始工作。 – 2010-02-05 10:07:34

+0

謝謝....爲此付出的努力;是的,它應該起作用,但現在還有另一個問題; EF在userOffices中隱藏FK列,將其作爲集合公開。我看到了可以做的事情。 – effkay 2010-02-05 11:24:24