使用LINQ for Inner Join()方法

时间:2015-01-31 14:01:48

标签: asp.net-mvc linq select inner-join

我有两张桌子:

public class Game
{
    public int GameId { get; set; }
    public int FirstTeamId { get; set; }
    public int GoalsFirstTeam { get; set; }
    public int GoalsSecondTeam { get; set; }
    public int SecondTeamId { get; set; }

    public Team Team { get; set; }
}
public class Team
{
    public int Id { get; set; }
    public string Name { get; set; }

    public IEnumerable<Game> Games { get; set; }
}

然后,使用:

       OperationDataContext dt = new OperationDataContext();
    public ActionResult Scores()
    {
        List<Games> model = dt.Games.ToList();
        var query = (from g in dt.Games
                     join t1 in dt.Teams on g.FirstTeamId equals t1.Id
                     join t2 in dt.Teams on g.SecondTeamId equals t2.Id
                     select new Games(){g.GameId, 
                                        t1.Name, 
                                        g.GoalsFirstTeam, 
                                        g.GoalsSecondTeam, 
                                        t2.Name
                                        }
                     ).ToList();
        model = query;
        return View(model);

我想在View中最终实现的是:

Game FirstTeam进球目标SecondTeam

1罗马1 3曼彻斯特

2 Inter 0 0 Milan

有人可以帮我解决这个问题,因为我收到了错误通知吗?

PS。当我尝试这个时:

OperationDataContext dt = new OperationDataContext();
    public ActionResult Scores()
    {
        var games = dt.Games.ToList();

        return View(games);
    }

结果是:

Game FirstTeam进球目标SecondTeam

1罗马1 3罗马

2 Inter 0 0 Inter

2 个答案:

答案 0 :(得分:0)

变化:

 select new Games(){ g.GameId,
                     t1.Name, 
                     g.GoalsFirstTeam, 
                     g.GoalsSecondTeam, 
                     t2.Name
                    }

以匿名类型:

select new { GameId = g.GameId,
             Team1 = t1.Name,
             Team2 = t2.Name,
             Team1Goals = g.GoalsFirstTeam, 
             Team2Goals = g.GoalsSecondTeam                 
             }

您还可以定义一个新类型 - GameResult,其中包含上述字段。

答案 1 :(得分:0)

正如Erik建议您可以改进模型

public class Game
{
    public int Id { get; set; }

    public int FirstTeamId { get; set; }
    public virtual Team FirstTeam { get; set; }

    public int GoalsFirstTeam { get; set; }
    public int GoalsSecondTeam { get; set; }

    public int SecondTeamId { get; set; }
    public virtual Team SecondTeam { get; set; }

    //What does this mean??
    public Team Team { get; set; }
}


public class Team
{
    public int Id { get; set; }
    public string Name { get; set;}
}

然后您可以这样查询数据

OperationDataContext dt = new OperationDataContext();
public ActionResult Scores()
{
    var query = dt.Games.Select(g=> new 
                   {
                       Game = g.Id,
                       FirstTeam = g.FirstTeam.Name,
                       Goals_FT = g.GoalsFirstTeam,
                       Goals_ST = g.GoalsSecondTeam,
                       SecondTeam = g.SecondTeam.Name
                   }
    return View(query.ToList());
}

希望它清楚有用, 的Alessandro