使用LINQ进行任意排序

时间:2009-05-28 14:22:46

标签: linq sorting entities

假设我们有一个具有属性att1和att2的实体,其中att1可以具有值a,b,c和att2可以具有值1,2,3。是否可以使用LINQ,以便我们可以通过应用任意排序规则对集合中的项进行排序,而无需实现IComparable。我面临的一个问题是,业务要求在某些屏幕上集合中的项目按单向排序,而在其他屏幕中则以其他方式排序。例如,规则可以声明需要对项目进行排序,以便首先列出“b”,然后是“a”,然后是“c”,并且在每个组中,首先是“3”,然后是“1”,然后是“2”。

1 个答案:

答案 0 :(得分:7)

不确定。您可以将OrderBy与谓词一起使用,该谓词可以随意返回任何类型的任意“排序顺序”。例如:

objectsWithAttributes.OrderBy(x =>
{
    // implement your "rules" here -- anything goes as long as you return
    // something that implements IComparable in the end.  this code will sort
    // the enumerable in the order 'a', 'c', 'b'

    if (x.Attribute== 'a')
        return 0;
    else if (x.Attribute== 'c')
        return 1;
    else if (x.Attribute== 'b')
        return 2;
}).ThenBy(x =>
{
    // implement another rule here?
});