LINQ - OrderBy明确

时间:2012-01-27 13:04:07

标签: linq

是否可以像这样使用LINQ OrderBy:

.OrderBy(x=>(x.SourceID == 3), (x.SourceID == 2), (x=>x.SourceID == 4), (x.SourceID == 1)).ToList();

所以它按3,2,4,1?

命令它们

2 个答案:

答案 0 :(得分:7)

不,这不是有效的lambda表达式。你可以做的事情就像是;

var sortOrder = new List<int> {3, 2, 4, 1};
var result = bop.OrderBy(x=> sortOrder.IndexOf(x.SourceID)).ToList();

如果你想将它扩展为使用未知数进行特殊处理(现在它们首先结束),你可以创建一个方法来确定排序顺序并使用它。

答案 1 :(得分:2)

根据Joachim Isaksson的回答,这可以用扩展方法包装:

public static class ListExtensions
{
    public static List<Source> SortByCustomOrder(this List<Source> list, List<int> sortOrder)
    {
        return list.OrderBy(x => sortOrder.IndexOf(x.SourceId)).ToList();
    }
}

将您的类替换为Source,将x.SourceId替换为您的属性

用法:

// the sort order
var sortOrder = new List<int> { 3, 2, 4, 1, 6, 5 };
var results = sources.SortByCustomOrder(sortOrder);