2012-05-02 2 views
0

utilisateurs:comment joindre plusieurs tables à la fois en utilisant linq to sql?

userid name  email 
    1  venkat [email protected] 
    2  venu  [email protected] 
    3  raghu [email protected] 

Partenaires:

id userid partnerid status 
    1  1  2   1 
    2  1  3   1 

Lieu:

id userid lat lon 
    1  1  12.00 13.00 
    2  2  14.00 12.00 
    3  3  14.00 14.23 

Requête:

var result = from partner in Partners 
       join user in Users on partner.UserId equals user.PartnerId 
       join location in Locations on patner.UserId equals location.PartnerId 
       where partner.UserId == 1 
       select new { PartnerId = partner.PartnerId, PartnerName = user.Name, Lat = location.Lat, Lon = location.Lon }; 

en passant userid=1 comme paramètre que je reçois ce résultat:

partnerid patnername  lat   lon 
    2   venkat   14.00   12.00 
    3   venkat   14.00   14.23 

par l'observation des résultats ci-dessus ici partnernames sont mauvais pour partnerid = 2 - patname était venu mais l'affichage "Venkat"

Pour partnerid = 3, Le nom d'utilisateur était raghu mais affichait venkat.

Comment afficher les bons noms de partenaires?

Répondre

1

Je crois que cette jointure est faux:

var result = from partner in Partners 
      join user in Users on user.UserId equals partner.PartnerId 

vous rejoignez un utilisateur sur son userId à un partenaire en utilisant son PartnerID.

Vous n'avez pas besoin de joindre un utilisateur à un partenaire en utilisant PartnerID dans les deux cas? Quelque chose comme ceci:

var result = from partner in Partners 
      join user in Users on user.PartnerId equals partner.PartnerId 
Questions connexes