2016-12-06 55 views
2

我有两个表。一个叫做Round,它包含两列CompetitionIdStartDate(加上一堆对这个问题不重要的其他列)。我还有一个名为Competition的表,其中有一列名为IdRound.CompetitionIdCompetition.Id的外键(一对多关系 - 一个竞赛可以有多轮)。在Linq中使用OrderBy

所以,当实体框架会将这些表格,C#类,它给了我两个班,一个Round具有与IEnumerable<Round>一个参考Competition和一个Competition

现在我想运行一个Linq查询,返回存储在Round表中的StartDate所订购的所有竞赛,但按日期确定的逻辑整数组合在一起。比如说,我有两场比赛,每场比赛有三轮。我希望返回两轮首轮(加上他们的比赛信息),然后是两轮第二轮等等。

关于如何做到这一点的任何想法?

回答

3

怎么是这样的:

var results = Competitions 
    .SelectMany(c => 
     c.Rounds 
     .OrderBy(r => r.StartDate) 
     .Select((r, i) => new 
     { 
      RoundNumber = i + 1, 
      Round = r, 
      Competition = c 
     }) 
    )   
    .OrderBy(r => r.RoundNumber) 
    .ThenBy(r => r.Round.StartDate) 
    .ThenBy(r => r.Competition.Id) 
    .ToList(); 

然后,你可以列举的结果是这样,例如:

foreach (var item in results) 
{ 
    Console.WriteLine(string.Format("{0:MMM dd, yyyy} - Round {1} of Competition {2}", 
         item.Round.StartDate, item.RoundNumber, item.Competition.Id)); 
} 

演示:https://dotnetfiddle.net/U515UK

+0

TNX引入.NET小提琴 – barakcaf

+0

谢谢@BrianRogers。起初编译器对查询不太满意,因为我有'var results = _dbContext.Competitions .....',但是一旦我将代码分成'var Competitions = _dbContext.Competition.ToList();'并且跟着它你的代码,它的工作就像一个魅力。再次感谢您的帮助。 –

+0

@houman_ag没问题;很高兴你能够得到它的工作。 –