2015-04-22 144 views
1

我有三个表格:Athletes,TeamsTeam_AthletesTeam_Athletes以多对多关系连接另外两个表。我正在做的是查询数据库,以便向运动员和一队队伍返回一个对象。我目前正在做这与以下两个查询:从多对多关系中选择对象并收集对象

var query = (from a in db.Athletes 
       join ta in db.Team_Athletes on a.Id equals ta.AthleteId 
       join t in db.Teams on ta.TeamId equals t.Id 
       where t.OrganizationId == organizationId 
       orderby a.LastName, a.FirstName 
       select new 
       { 
        Athlete = a, 
        Team = t 
       }).ToArray(); 

    var result = from i in query 
       group i by i.Athlete into g 
       select new 
       { 
        Athlete = g.First().Athlete, 
        Teams = g.Select(i => i.Team).ToArray() 
       }; 

我想知道如何查询一起如果可能的话结合起来,但我不能拿出任何工作。思考?

+0

哪些LINQ的味道,你使用? LINQ to SharePoint? –

+0

LINQ to Entities – tarrball

回答

1

你为什么不只是使用:

var query = from a in db.Athletes 
      join ta in db.Team_Athletes on a.Id equals ta.AthleteId 
      join t in db.Teams on ta.TeamId equals t.Id 
      where t.OrganizationId == organizationId 
      orderby a.LastName, a.FirstName 
      group t by a into g 
      select new { Athlete = g.Key, Teams = g }; 

然后,您可以遍历结果,就像这样:

foreach (var entry in query) 
{ 
    Console.WriteLine("Athlete: {0}", entry.Athlete); 
    foreach (Team t in entry.Teams) 
    { 
     Console.WriteLine("Team: {0}", t); 
    } 
} 
+0

“LINQ to Entities does not recognized the method'...... ToList [Team]'method,and this method can not be translated into a store expression” - exception thrown – tarrball

+0

那么,尝试删除'ToList()'然后,它应该工作正常... – chomba

+0

你是对的 - 放弃'ToList()'离开你的答案? – tarrball