2010-05-04 74 views
2

我有对象的集合,我知道我可以通过名称(string类型)说如何使用Lambda表达式对对象内的INTEGERS进行排序?

collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName)); 

的作品进行排序。

但我想通过ID(整型)进行排序,并没有这样的事情Int32.Compare

那么,如何做到这一点?这是行不通的

collEquipment.Sort((x, y) => (x.ID < y.ID)); //error 

我知道答案会非常简单。 Lambda表达式让我困惑。

+0

语言是C#吗? – Thomas 2010-05-04 15:33:48

回答

7

试试这个

collEquipment.Sort((x, y) => y.ID - x.ID); 
+3

可能有一些大数字的环绕问题 – 2010-05-04 16:01:45

+0

伟大的作品,谢谢!它只是一个数据库中的项目ID ..所以不会太大 – punkouter 2010-05-04 16:07:11

+0

@Marc Gravell - 我想这对于任何方法都是一样的吗? – SysAdmin 2010-05-04 16:07:19

13
collEquipment.Sort((x, y) => y.ID.CompareTo(x.ID)); 
+1

*为什么这个工作原理的简短解释是Sort不接受一个小于运算符 - 它需要一个“比较器”运算符,如果x> y则返回<0 if x 0,如果x == y则返回0。所以它总是期望一个整数结果,而不是一个布尔值。 int上的CompareTo()方法在这种模式下返回<0, 0, or > 0,所以尽管使用if-else也会起作用(如果(x.ID y.ID)返回1;否则返回0;)。 – 2012-10-06 03:30:47

7

在这里,你走了,不大不小的打击,实现IComparable[<T>]任何属性列表(int做):

public static class ListExtensions { 
    public static void Sort<TSource, TValue>(
     this List<TSource> list, 
     Func<TSource, TValue> selector) { 
     list.Sort((x,y) => Comparer<TValue>.Default 
      .Compare(selector(x),selector(y))); 
    } 
} 

现在:

collEquipment.Sort(x => x.ItemName); 

collEquipment.Sort(x => x.ID); 
相关问题