我有两张桌子。一个名为Round
,其中包含两个名为CompetitionId
和StartDate
的列(加上一堆对此问题不重要的其他列)。我还有一个名为Competition
的表,其中一列名为Id
。 Round.CompetitionId
是Competition.Id
的外键(一对多关系 - 一个竞赛可以有多轮)。
因此,当Entity Framework将这些表转换为C#类时,它会为我提供两个类,一个Round
引用Competition
,一个Competition
引用IEnumerable<Round>
现在我想运行一个Linq查询,该查询返回StartDate
存储在Round
表中的所有竞赛排序,但按日期确定的逻辑轮数组合在一起。所以,例如,假设我有两个比赛,每个比赛有3轮。我想要返回两个第一轮(加上他们的比赛信息),然后是两个第二轮,依此类推。
关于我如何做到这一点的任何想法?
答案 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));
}