Esa*_*abe 91 c# lambda list sql-order-by
我想在许多字段中订购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#列表?
非常感谢你
Dav*_*ale 263
用途ThenBy
:
Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)
请参阅MSDN:http://msdn.microsoft.com/en-us/library/bb549422.aspx
CMi*_*nus 32
是的,您可以通过指定比较方法来实现.优点是排序的对象不必是IComparable
aListOfObjects.Sort((x, y) =>
{
int result = x.A.CompareTo(y.A);
return result != 0 ? result : x.B.CompareTo(y.B);
});
Run Code Online (Sandbox Code Playgroud)
让你的对象像
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 ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
还要注意CompareTo的返回值:
http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx
然后,如果你有一个MyObject列表,请调用.Sort()即
var objList = new List<MyObject>();
objList.Sort();
Run Code Online (Sandbox Code Playgroud)