我使用LINQ排序多個字段。但是,如何確定列表中的兩個或多個條目是否相等?也就是說,所有的字段都是平等的,排序順序不會因爲平等而改變。LINQ排序。如何確定多個字段的相等
public List<SfpDb.ResultatViewRang> sortResMest(List<SfpDb.ResultatViewRang> resultat)
{
return resultat
.OrderBy(p => p.statdsq)
.ThenBy(p => p.statdns)
.ThenBy(p => p.statdnf)
.ThenByDescending(p => p.totsum)
.ThenByDescending(p => p.totOmskyting)
.ThenByDescending(p => p.totinnertreff)
.ThenByDescending(p => p.sumr10)
.ThenByDescending(p => p.sumr9)
.ThenByDescending(p => p.sumr8)
.ThenByDescending(p => p.sumr7)
.ThenByDescending(p => p.sumr6)
.ThenByDescending(p => p.sumr5)
.ThenByDescending(p => p.sumr4)
.ThenByDescending(p => p.sumr3)
.ThenByDescending(p => p.sumr2)
.ThenByDescending(p => p.sumr1)
.ThenBy(p => p.perTreffRangStr)
.ThenBy(p => p.enavn, strCompareNo)
.ThenBy(p => p.fnavn, strCompareNo)
.ToList<SfpDb.ResultatViewRang>();
}
該內容來自數據庫,內容來自比賽結果,並根據比賽規則進行排序。排序用於確定參賽者獲得的位置。
根據規則,如果一個或多個競爭者具有相同的競爭價值(p.totsum,p.totOmskyting,.....),則它們獲得相同的位置。例如:
1.吉姆哈里斯,580,25,32,.....
2.湯姆詹森,560,20,30,.....
3.讓·約翰遜,523,23,26 ,.....
羅伊比曼,523,23,26,......
5道格·威爾遜,520,23,26,......
這個問題我排序後,我不確定如何識別這個例子中位置3的兩個人。
在通用術語中,具有下面的類:
public class MigrObject
{
public int first { get; set; }
public int second { get; set; }
public int third { get; set; }
}
它將使用
.OrderByDescending(p => p.first)
.ThenByDescending(p => p.second)
.ThenByDescending(p => p.third)
具有以下記錄進行排序:(第一,第二,第三)
580,25, 32
560,30,30
523,23,26
523,23,26
523,23,26
520,23,26
518,40,30
518,40,30
430,14,16
你怎麼確定是相等的記錄?處理的記錄後,它應具有以下的位置/順序:
1:580,25,32
2:560,30,30
3:523,圖23,26
3:523,圖23,26
3:523,圖23,26
6:520,23,26
7:518,40,30
7:518,40,30
9:430,14,16
根據國際規則,參與者將按照價值排序第一場(第一場)。如果有平局,第二欄將進行比較,所以我們排序「第二」。如果還有平局,第三欄將進行比較,所以我們排序「第三」。如果有任何關係,運動員必須具有相同的排名,並且必須使用運動員的姓氏以拉丁字母順序列出。
如果加工後的位置是1,2,3,3,3,6,7或1,2,3,3,4,4並不重要。主要問題是在比較所有字段以及涉及哪些記錄之後知道是否還有任何關係。
我希望LINQ中有一些功能可以在所有比較字段相同時通知您。
您可以使用'Distinct'或'GroupBy'方法。 – Valentin
_「所有字段都是平等的,排序順序不會因爲平等而改變」_ - 爲什麼你在意?你打算如何使用平等?請提供一個很好的[mcve],清楚地表明你正在嘗試做什麼。請準確而具體地解釋代碼的作用以及您希望它做什麼。 –
嘗試檢查這個http://stackoverflow.com/q/312024/3956100確定你可以更改linq中的IComparer來滿足你的需求。 – Niklas