LINQ以字母顺序搜索字符串开头的名称排序

时间:2015-02-13 19:49:33

标签: c# linq sorting ienumerable

我有以下数据

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)

2 个答案:

答案 0 :(得分:7)

在这之后添加一个ThenBy来订购以b开头的东西以及没有的东西。如果您希望小写“b”匹配以大写“B”开头的名称,您可能还需要进行不区分大小写的比较。

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

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

答案 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();