是否可以像这样使用LINQ OrderBy:
.OrderBy(x=>(x.SourceID == 3), (x.SourceID == 2), (x=>x.SourceID == 4), (x.SourceID == 1)).ToList();
所以它按3,2,4,1?
命令它们答案 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);