List.Sort(自定义排序……)

我有一个List对象,其中包含3个项目:Partial,Full To H和Full To O.

我将此列表绑定到asp OptionButtonList,并按字母顺序对其进行排序。 但是,我想按如下方式对列表进行排序:

全部到H,部分,全部到O.

我怎么能做到这一点?

Linq非常棒。 您甚至可以构建订单序列,以便在运行时定义,因为直到ToList才执行排序。

  var sortedList = yourList.OrderBy(i => i.FullToH). ThenBy(i => i.Partial). ThenBy(i => i.FullToO).ToList(); 

谢谢大家的帮助!

我是这样做的:

 List sortedList = new List(); sortedList = list.OrderBy(i => i.CodeValue == "FullToH").ThenBy(i => i.CodeValue == "Partial").ThenBy(i => i.CodeValue == "FullToO").ToList(); 

然后绑定到sortedList!

好的,我知道这已经有几年了,但我有一个替代解决方案,我认为比未来读者可能想要考虑的上述解决方案更优雅:

在你的class上:

 static readonly List codeValueSortOrder = new List { "Full To H", "Partial", "Full To O" }; 

在你的方法中:

 sortedList = list.OrderBy(i=> codeValueSortOrder.IndexOf(i.CodeValue)); 

您列出的项目(例如FullToHo)是否只是字符串? 如果是这样,那么您需要做的就是编写一个方法来进行比较并使用该方法进行排序。

 public int CompareEntries(string left, string right) { const string fullToH = "Full To H"; const string partial = "Partial"; const string fullToO = "Full To O"; if ( left == right ) { return 0; } else if ( left == fullToH ) { return -1; } else if ( left == fullToO ) { return 1; } else if ( right == fullToH ) { return 1; } else { return -1; } } list.Sort(CompareEntries); 

假设你的清单不是

  List myList = new List(); 

但相反,像

 List myList = new List(); 

(其中每个元素具有相同的对象类型)

你可以这样做:

 myList.Sort((firstObj, secondObj) => { return firstObj.SomeProperty.CompareTo(secondObj.SomeProperty); } ); 

为您的自定义类型(实现IComparer接口)创建Comparer。 然后,您可以使用它来对List进行排序:

 List list = new List(); // Fill list list.Sort(new CustomComparer()); 

或者,如果您使用的是较新版本的框架而不需要重新使用排序逻辑,则可以使用IEnumerable.OrderBy()方法。