2011-07-03 8 views
0

私はLINQ:リンク1:M表とマージ結果

  • table Visibility(User1IdとUser2Id、ユーザーにある外部キーの両方(User.Idと などで)

    1. table Usersを持っていますテーブル)

    2. table Contact(User.Idは外部キーと1:1の連絡先をユーザーに関連付けています)。

    可視性テーブルは、ユーザーが自分だけでなく他ののユーザーの連絡先を表示できるようにしなければなりません。この目的のために、User1はUser2の連絡先を見ることができます(ただし、その逆はできません)。

    さて、私はこのようなクエリを実行しようとしているが、明らかにそれは動作しません。

    Contact.Where(c => c.UserId == userId || c.UserId IN c.User.Visibilities) - 基本的に私は何をやろうとしていることは供給ユーザーIDを持っている1.すべての連絡先レコードを返すことです(それは簡単で、すでに当然のことです)は、別のユーザーに関連付けられているすべての連絡先を返しますが、指定されたユーザーはVisibilityテーブルのUser1:User2を介してその別のユーザーにリンクされます。どのようなユーザーID 10を照会するとき、私はLINQクエリからの復帰を希望するユーザー10が既に連絡先1を見ることができるという事実に基づいてコンタクト13ある

    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 
    

    :行くの完全な例を取得するには

    、また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

    VisibilityはUser2Id FKにマッピングする必要があります –

    関連する問題