要按多个条件对列表进行排序,我现在正在执行以下操作:

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)

有关良好实现流畅界面排序的任何想法吗?

有帮助吗?

解决方案

您的意思是以下内容?

using System.Linq;

collection.OrderBy(t => t.FirstCriteria).ThenBy(t => t.SecondCriteria);

其他提示

这里的问题是听起来你想要到位排序;在这种情况下,当您完成添加条件时,您需要知道(使用流畅的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 可能不同。您可能需要使用终结器步骤和中间“构建器”步骤。 class(基本上是编写DSL),或者你需要先单独构造比较器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top