2013-08-28 4 views
0

J'ai une table contenant des données utilisateurjoindre deux table avec deux étrangers Key

Users(userID, name , email ,......) 

et je Hava une autre table qui contient:

Userfriends(UserFriendID,Fk_UserSendReqID,FK_UserRecieveReqID,IsAccepted,....) 

dans la table UserFriends il y a deux clés étrangères qui se rejoignent ce tableau avec la table des utilisateurs je veux écrire une requête avec linq qui sélectionne les amis de l'utilisateur avec userId=2 j'écris cette requête mais c'est faux

var n = from u in DataContext.Context.Users 
       join uf in DataContext.Context.UsersFriends 
       on u.UserID equals uf.UserSendReqID 
       join uf2 in DataContext.Context.UsersFriends 
       on u.UserID equals uf2.UserRecieveReqID 
       where (uf.UserSendReqID == 2|| uf.UserRecieveReqID == 2) 
       && uf.IsAccepted == true 
       select new 
       { 
        name = u.FirstName + " " + u.LastName 
       }; 

Répondre

0

Comme il y a 2 clés étrangères pour la table Users, vous devez joindre Users table au lieu de UsersFriends

var userID = 2; 
var n = from u in DataContext.Context.Users 
      join uf in DataContext.Context.UsersFriends 
      on u.UserID equals uf.UserSendReqID 
      join u in DataContext.Context.Users 
      on u2.UserID equals uf.UserRecieveReqID 
      where (uf.UserSendReqID == userID || uf.UserRecieveReqID == userID) 
      && uf.IsAccepted == true 
      select new 
      { 
       //if UserSendReqID == userID, then select for u, else u2 
       name = (uf.UserSendReqID == userID) 
          ? (u.FirstName + " " + u.LastName) 
          : (u2.FirstName + " " + u2.LastName) 
      }; 
0
var n = DataContext.Context.Users 
        .Where(u=>DataContext.Context.UsersFriends 
          .Where(uf=>(uf.UserSendReqID == 2 || 
             uf.UserReceiveReqID == 2) && uf.IsAccepted) 
          .Any(uf=>uf.UserFriendID == u.userID)) 
        .Select(u=> new { 
           Name = u.FirstName + " " + u.LastName          
           }); 

Ou en utilisant Join:

var n = DataContext.Context.Users 
        .Join(DataContext.Context.UsersFriends 
            .Where(uf=>(uf.UserSendReqID == 2 || 
             uf.UserReceiveReqID == 2) && uf.IsAccepted), 
         x=>x.userID, x=>x.UserFriendID, (x,y)=>x) 
        .Select(u=> new { 
           Name = u.FirstName + " " + u.LastName          
           }); 
requête d'expression

:

var n = from u in DataContext.Context.Users 
     join uf in DataContext.Context.UsersFriends on u.userID equals uf.UserFriendID 
     where (uf.UserSendReqID == 2 || uf.UserReceiveReqID == 2) && uf.IsAccepted 
     select new { 
       Name = u.FirstName + " " + u.LastName 
       };