代码之家  ›  专栏  ›  技术社区  ›  Elander

“Then By”与不同数量的标准的用法

  •  4
  • Elander  · 技术社区  · 12 年前

    我正在编写一个C#程序,它允许用户指定排序标准。例如,用户只能按“serviceName”进行排序,或者添加其他几个标准,如“isHD”或“isGood”。我的要求是,我想使用“.Then By”语句,但用户决定我需要写多少次。

    有什么方法可以让我在取决于开关/案例块的标准数量上获得一些灵活性吗? 例如

    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)
    

    此外,这些标准的顺序将由用户选择。

    2 回复  |  直到 12 年前
        1
  •  6
  •   Kamil Budziewski    12 年前

    您可以使用通用方法:

        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)
    

    可以通过检查选择器是否被传递来改进

        2
  •  2
  •   David    12 年前

    您可以指定应用第一个排序顺序的结果(即。 OrderBy )到类型为的变量 IOrderedEnumerable 然后打电话 ThenBy 在一个循环中,根据需要多次分配给同一个变量。

    推荐文章