【问题标题】:Order by names starting by searched string alphabetically LINQ按名称按字母顺序按搜索字符串开头的名称排序 LINQ
【发布时间】:2015-02-13 19:49:32
【问题描述】:

我有以下数据

jabb
Bucynski
Bartley
Abart
Benson
Brown
Beerbower
Mack
Nina
Salt
Walter

用户对这些记录进行搜索,我想以这样一种方式对记录进行排序,即以搜索字符串开头的记录应按字母顺序显示在顶部,其余记录应位于这些记录之后。假设用户搜索“b”,那么搜索结果列表应该是这样的

Bartley
Beerbower
Benson
Brown
Bucynski
Abart
jabb
Mack
Nina
Salt
Walter

我们在这里看到两组,一组按字母顺序以“b”开头,其余按字母顺序向下

注意:我试过这样

IEnumerable<Admin_Customer_List_Result> adminResult;

adminResult adminResult.OrderBy(m => m.Last_Name.StartsWith(searchString) ? 0 : 1)

【问题讨论】:

    标签: c# linq sorting ienumerable


    【解决方案1】:

    只需在其后添加ThenBy 即可订购以 b 开头的内容和不以 b 开头的内容。此外,如果您希望小写“b”与以大写“B”开头的名称匹配,则可能需要进行不区分大小写的比较。

    adminResult.OrderBy(m => m.Last_Name.ToLower()
                              .StartsWith(searchString.ToLower()) ? 0 : 1)
               .ThenBy(m => m.Last_Name);
    

    此外,您可以使用OrderByDescending,而您不需要? 0 : 1

    【讨论】:

      【解决方案2】:
      var list = new List<string> { "Jabb", "Bucynski", "Bartley", "Abart", "Benson", "Brown", "Beerbower", "Mack", "Nina", "Salt", "Walter" };
      string input = "B";
      var result = list.GroupBy(x => x.StartsWith(input))
                       .OrderByDescending(x => x.Key) //order groups
                       .SelectMany(g => g.OrderBy(x => x)) //order items in each group
                       .ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 2018-07-07
        相关资源
        最近更新 更多