Order a List (C#) by many fields?
本问题已经有最佳答案,请猛点这里访问。
我想在许多字段中订购C#中的对象列表,而不仅仅是一个。 例如,假设我有一个名为X的类,它有两个属性,A和B,我按顺序有以下对象:
object1 => A ="a",B ="h"
object2 => A ="a",B ="c"
object3 => A ="b",B ="x"
object4 => A ="b",B ="b"
我想首先按A属性排序列表,当它们等于时,按B元素排序,所以顺序为:
"a""c"
"a""h"
"b""b"
"b""x"
据我所知,OrderBy方法按一个参数排序。
问题:如何通过多个字段订购C#列表?
非常感谢你
使用
请参阅MSDN:http://msdn.microsoft.com/en-us/library/bb549422.aspx
是的,您可以通过指定比较方法来实现。 优点是排序的对象不必是IComparable
1 2 3 4 5 | aListOfObjects.Sort((x, y) => { int result = x.A.CompareTo(y.A); return result != 0 ? result : x.B.CompareTo(y.B); }); |
让你的对象像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class MyObject : IComparable { public string a; public string b; virtual public int CompareTo(object obj) { if (obj is MyObject) { var compareObj = (MyObject)obj; if (this.a.CompareTo(compareObj.a) == 0) { // compare second value return this.b.CompareTo(compareObj.b); } return this.a.CompareTo(compareObj.b); } else { throw new ArgumentException("Object is not a MyObject"); } } } |
还要注意CompareTo的返回值:
http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx
然后,如果你有一个MyObject列表,请调用.Sort()即
1 2 |
您的对象应该实现IComparable接口。
有了它,你的类就变成了一个名为