2011-07-03 42 views
0

我有LINQ:鏈接1:M表和合並結果

  1. table Users(與User.Id和 例如)

  2. table Visibility(User1Id和User2Id,兩者都是外鍵的用戶表)

  3. table Contact(User.Id與外鍵鏈接1:1聯繫到用戶)。

能見度表應允許用戶查看其他用戶的聯繫人以及他們自己。爲此,用戶1被允許查看用戶2的聯繫人(但反之亦然)。現在

,我想這樣的查詢,但顯然它不工作:

Contact.Where(c => c.UserId == userId || c.UserId IN c.User.Visibilities) - 基本上就是我想要做的是返回1.有提供的用戶標識的所有聯繫人記錄(這很簡單,當然已經工作了)返回與不同用戶關聯的所有聯繫人,但提供的用戶通過Visibility表中的User1:User2鏈接到該不同用戶。

爲了得到一個完整的例子去:

Users 
===== 
UserId  Name 
10   John 
15   Sasha 
20   Marcus 

Visibility 
========== 
User1Id User2Id 
10   20 

Contact 
======= 
ContactId UserId Zip 
1   10  23232 
2   15  55555 
3   20  92929 

我想從什麼LINQ查詢返回查詢用戶名時10是聯繫人13基於一個事實,即用戶10已經可以看到聯繫1 ,並且由於Visibility表還可以看到用戶20的聯繫人3

Result (when querying for user 10) 
====== 
ContactId UserId Zip 
1   10  23232 
3   20  92929 

希望有道理嗎?

回答

1
Contact.Where(c=>c.UserId == userId || c.User.Visibilities.Any(v=>v.User1Id == userId)) 
+0

Visibilities必須映射到User2Id FK –