以很多字段排列列表(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)
的新函数。 在这个函数中,你可以对当前对象和其他对象进行任何比较,并返回一个整数值,如果第一个对象大于,小于或等于第二个对象。