2016-12-06 69 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沒問題;很高興你能夠得到它的工作。 –