在Linq中使用OrderBy

时间:2016-12-06 02:10:22

标签: c# entity-framework linq

我有两张桌子。一个名为Round,其中包含两个名为CompetitionIdStartDate的列(加上一堆对此问题不重要的其他列)。我还有一个名为Competition的表,其中一列名为IdRound.CompetitionIdCompetition.Id的外键(一对多关系 - 一个竞赛可以有多轮)。

因此,当Entity Framework将这些表转换为C#类时,它会为我提供两个类,一个Round引用Competition,一个Competition引用IEnumerable<Round>

现在我想运行一个Linq查询,该查询返回StartDate存储在Round表中的所有竞赛排序,但按日期确定的逻辑轮数组合在一起。所以,例如,假设我有两个比赛,每个比赛有3轮。我想要返回两个第一轮(加上他们的比赛信息),然后是两个第二轮,依此类推。

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

1 个答案:

答案 0 :(得分: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