2009-07-09 9 views
0

J'ai des problèmes pour joindre des tables sur une requête LINQ.requête LINQ simple

alt text http://www.kalleload.net/uploads/qiscjknuhutn.jpg

Comme vous pouvez le voir, il y a trois tables là-bas. Sur ma page Web, je souhaite afficher les données suivantes dans une vue en liste.

betid | bet.title | bet.description | match.location | match.begindate/enddate | teamone NAME | Nom de l'équipe

alors laissez-moi vous expliquer cela. Je veux 3 champs de la table des paris. Je veux 2 champs de la table de correspondance (où le match.matchid = bet.matchid) Je veux 2 champs de la table TEAM (où match.teamone = team.teamid et match.teamtwo = team.teamid)

J'espère que cela a du sens.

thankyou

Répondre

3

Il semble que vous avez déjà les relations défini. Si vous utilisez le concepteur, vous devez avoir des entités existantes dans les classes générées.

var result = bet.Select(b => new { 
       BetID = b.betid, 
       Title = b.title, 
       Description = b.description, 
       BeginDate = b.match.begindate, 
       EndDate = b.match.enddate, 
       TeamOneName = b.match.team_1.teamname, 
       TeamTwoName = b.match.team_2.teamname 
       }); 

Notez que je ne fais que deviner les noms des associations. Vous devriez être en mesure de comprendre les noms qui leur ont été donnés par le concepteur.

+0

Oui, je suis d'accord. Beaucoup plus lisible que ma solution aussi :) –

2

La clé de celui-ci est d'inclure une jointure réflexive sur la table de l'équipe, pour l'équipe une et l'équipe deux, comme celui-ci:

var result = from bet in db.bet 
    join match in db.match on bet.matchid equals match.matchid 
    join team1 in db.team on match.teamone equals team1.teamid 
    join team2 in db.team on match.teamtwo equals team2.teamid 
    select new {bet.betid, bet.title, bet.description, match.location, match.begindate, match.enddate, team1.name, team2.name};