我按如下方式对自定义类进行排序,按FirstHalfPoints排序:
var firstHalfTables = new FirstHalfTableCollection();
firstHalfTables.PopulateForSeason(SeasonId);
firstHalfTables.Sort((t1, t2) => t1.FirstHalfPoints.CompareTo(t2.FirstHalfPoints));
firstHalfTables.Reverse();
FirstHalfTableRepeater.DataSource = firstHalfTables;
FirstHalfTableRepeater.DataBind();
我还需要另外两个字段'GD' - 目标差异和'GF' - 目标 - 按照'FirstHalfPoints'的初始排序
排序所以完成的集合将由FirstHalfPoints排序,然后由GD排序,然后由GF排序。
任何人都可以帮助我进行多次排序吗?
答案 0 :(得分:2)
您可以使用LINQ,这通常会使代码更具可读性:
var firstHalfTables = new FirstHalfTableCollection();
firstHalfTables.PopulateForSeason(SeasonId);
var firstHalfTablesProcessed = (from table in firstHalfTables
orderby table.FirstHalfPoints, table.GD, table.GF
select table).Reverse()
FirstHalfTableRepeater.DataSource = firstHalfTablesProcessed;
或者你可以让你的比较委托返回正确的排序(可能比lambda更好的正常函数):
int FirstHalfTableComparison(FirstHalfTable t1, FirstHalfTable t2)
{
int result = t1.FirstHalfPoints.CompareTo(t2.FirstHalfPoints);
if (result == 0)
{
result = t1.GD.CompareTo(t2.GD);
if (result == 0)
result = t1.GF.CompareTo(t2.GF);
}
return result;
}
你可以这样使用:
firstHalfTables.Sort(FirstHalfTableComparison);
答案 1 :(得分:1)
您可以使用直接LINQ表达式:“OrderBy”和“ThenBy”:MSDN Sorting Data
OR
你必须扩大比较范围。你必须要记住:a.CompareTo(b)
如果a小于b,则返回-1,如果它们相等则返回0,如果a大于b,则返回+1。
请尝试以下方法:
private void Compare(YourRow a, YourRow b)
{
let v = a.FirstHalfPoints.CompareTo(b.FirstHalfPoints);
if (v != 0) return v;
v = a.GD.CompareTo(b.GD);
if (v != 0) return v;
return a.GF.CompareTo(b.GF);
}
并使用此功能调用Sort
。