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

Order by names starting by searched string alphabetically LINQ

我有以下数据

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

只需在其后添加一个 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