2013-02-13 44 views
1

我是新的Linq並找不到類似的主題。 我只想顯示當前已通過身份驗證的用戶所在的組織。Linq通過多個對象類

我有以下的LINQ,但返回的組織是不正確的:

OrganizationList.DataSource = from i in Database<Organization>.Linq() 
where (i.Users.Select(y => y.User.Id).Contains(user_id)) 
select i; 

這裏是類:

public class Organization 
{ 
    int Id 
    string Name 
    IList<OrganizationUser> Users 
    [...] 
} 

OrganizationUser 
{ 
    int Id 
    User User 
    Organization Organization 
    [...] 
} 

User 
{ 
    int Id 
    string FirstName 
    string LastName 
    [...] 
} 

假設:

Database<TEntity> where TEntity : class 

user_id是驗證當前用戶ID

我使用NHibernate

我不能修改類的,所以OrganizationUser必須使用。

你能幫我嗎?


編輯: 非常感謝您的幫助!

這兩種解決方案都工作:

OrganizationList.DataSource = Database<Organization>.Linq() 
          .Where(o => o.Users.Any(u => u.User.Id == user_id)); 


OrganizationList.DataSource = from i in Database<Organization>.Linq() 
           where (i.Users.Any(y => y.User.Id == user_id) 
           select i; 

感謝名單再次:)

+3

** **如何是不正確的結果。除了'你能幫我嗎?',我沒有看到問題嗎? – LukeHennerley 2013-02-13 10:53:41

回答

0

我沒有測試它的機會,但下面可能工作;

OrganizationList.DataSource = from i in Database<Organization>.Linq() 
where (i.Users.Any(y => y.User.Id == user_id) 
select i; 
+0

這應該會產生與OP已具有的查詢相同的結果。 – 2013-02-13 10:58:14

+0

@DanielHilgarth實際上,這是比較user_id和'User'表中的'ID',而OP將它與'OrganizationUser'表中的'ID'進行比較。這些ID很可能不同。 – juharr 2013-02-13 11:11:19

+0

@juharr:這是不正確的。請再檢查一次。這兩個查詢都以「組織」開始,然後繼續到「用戶」,最後是「用戶」。 – 2013-02-13 11:13:51

0

怎麼樣,

var organizationsWithUser = Database<Organization>.Linq() 
          .Where(o => o.Users.Any(u => u.User.Id == user_id)); 
+0

這應該會產生與OP已具有的查詢相同的結果。 – 2013-02-13 10:58:34

+0

該解決方案適用於小改動:.Any(u => u.User.Id == user_id) – KevinM 2013-02-13 13:24:58