要按多个条件对列表进行排序,我现在正在执行以下操作:
collection.Sort((f1, f2) =>
{
var comp = f1.FirstCriteria.CompareTo(f2.FirstCriteria);
return comp != 0 ? comp : f1.SecondCriteria.CompareTo(f2. SecondCriteria);
});
但能做出类似的事情不是很好吗
collection.MultipleSort(f1.FirstCriteria, f2.FirstCriteria)
.Then(f1.SecondCriteria, f2.SecondCriteria)
有关良好实现流畅界面排序的任何想法吗?
答案 0 :(得分:15)
您的意思是以下内容?
using System.Linq;
collection.OrderBy(t => t.FirstCriteria).ThenBy(t => t.SecondCriteria);
答案 1 :(得分:2)
这里的问题是听起来你想要到位排序;在这种情况下,当您完成添加条件时,您需要知道(使用流畅的API)。这与LINQ方法形成对比,因为它使用延迟执行。
对于单一条件排序,您可以使用以下内容:
public static void Sort<TSource, TValue>(this List<TSource> source,
Func<TSource, TValue> selector) {
var comparer = Comparer<TValue>.Default;
source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
public static void SortDescending<TSource, TValue>(this List<TSource> source,
Func<TSource, TValue> selector) {
var comparer = Comparer<TValue>.Default;
source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}
多种类型会更难;您无法使用params
,因为每个TValue
可能不同。您可能需要使用终结器步骤和中间“构建器”类(基本上编写DSL),或者您需要首先单独构建比较器。