2014-10-10 73 views
0

我需要獲得與Organization有關係的Users的列表,但僅噹噹前用戶與同一Organization有關係。EF查詢-SQL「IN」 - 同表

換句話說,如果當前用戶與相關組織沒有關係,則不會返回任何結果。如果存在關係,則返回結果。這是我現在的查詢,但它只檢索一個用戶是當前用戶。

以下查詢顯然會獲得所有活動UserOrganization記錄,其中OrganizationId與傳入查詢的值相匹配。所以我的問題是,我怎麼知道帶我的當前用戶(UserId),並確保它們存在於此結果集內,然後再返回他們不應該看到的記錄?

var dbUsers = db.UserOrganizations 
        .Where(u => u.OrganizationId == organizationId) 
        .WhereIf(active, u => u.IsActive) 

回答

2
var dbUsers = db.Organizations 
        .Where(o => o.OrganizationId == organizationId 
        && o.Users.Any(u=>u.UserId == currentUserId && u.IsActive)) 
        .SelectMany(o=>o.Users) 

如果你不能看到Users通過Organization你可以做這樣的事情:

var dbUsers = db.Organizations 
        .Where(o => o.OrganizationId == organizationId 
&& o.UserOrganizations.Any(u=>u.User.UserId == currentUserId && u.User.IsActive)) 
        .SelectMany(o=>o.UserOrganizations) 
        .Select(uo=>uo.User) 
0

最簡單的方法是檢查當前用戶是否有這種關係並決定是否要繼續。這節省了做一個潛在的昂貴的數據庫操作:

var hasRelationship = db.UserOrganisations.Any(uo => 
          uo.UserId == currentUserId && 
          uo.OrganizationId == organizationId); 

if(hasRelationship) 
{ 
    //Interesting stuff here 
} 
else 
{ 
    //No access 
}