以很多字段排列列表(C#)?

我想要在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元素sorting,那么顺序是:

“a”“c”
“a”“h”
“b”“b”
“b”“x”

据我所知,OrderBy方法按一个参数sorting。

问题 :如何通过多个字段来订购C#列表?

非常感谢你

使用ThenBy

Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)

请参阅MSDN: http : //msdn.microsoft.com/en-us/library/bb549422.aspx

是的,你可以通过指定比较方法来做到这一点。 优点是sorting的对象不必是IComparable

  aListOfObjects.Sort((x, y) => { int result = xACompareTo(yA); return result != 0 ? result : xBCompareTo(yB); }); 

让你的对象有点像

 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()即

 var objList = new List<MyObject>(); objList.Sort(); 

你的对象应该实现IComparable接口。

有了它,你的类变成了一个名为CompareTo(T other)的新函数。 在这个函数中,你可以对当前对象和其他对象进行任何比较,并返回一个整数值,如果第一个对象大于,小于或等于第二个对象。