我正在编写一个C#程序,允许用户指定排序标准。例如,用户只能按“serviceName”排序,或添加其他几个标准,如“isHD”或“isGood”。我要问的是,我想使用'.Then By'语句,但用户确定我需要写多少次。
有什么方法可以根据开关/案例块在标准数量上获得一些灵活性? e.g
List.OrderBy(t => t.name)
List.OrderBy(t => t.isHD).ThenBy(t => t.name)
List.OrderBy(t => t.isGood).ThenBy(t => t.name).ThenBy(t => t.isHD)
用户也会选择这些标准的顺序。
答案 0 :(得分:6)
你可以使用通用方法:
public List<T> SortBy<T>(List<T> list, params Func<T, object>[] selectors)
{
var ordered = list.OrderBy(selectors[0]);
for (int i = 1; i < selectors.Count(); i++)
{
ordered= ordered.ThenBy(selectors[i]);
}
return ordered.ToList();
}
运行它:
SortBy(List, x=>x.name, x=>x.isHD, x=>x.isGood)
将会:
List.OrderBy(x=>x.name).ThenBy(x=>x.isHD).ThenBy(x=>x.isGood)
通过检查传递的选择器是否可以改进
答案 1 :(得分:2)
您可以将应用第一个排序顺序(即OrderBy
)的结果分配给类型为IOrderedEnumerable
的变量,然后在循环中调用ThenBy
分配给同一变量根据需要多次。