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

you*_*gul 4 c# linq sorting ienumerable

我有以下数据

jabb
Bucynski
Bartley
Abart
Benson
Brown
Beerbower
Mack
Nina
Salt
Walter
Run Code Online (Sandbox Code Playgroud)

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

Bartley
Beerbower
Benson
Brown
Bucynski
Abart
jabb
Mack
Nina
Salt
Walter
Run Code Online (Sandbox Code Playgroud)

我们在这里看到两个组,一个按字母顺序以"b"开头,而按字母顺序排列所有其他组

注意:我试过这样的

IEnumerable<Admin_Customer_List_Result> adminResult;

adminResult adminResult.OrderBy(m => m.Last_Name.StartsWith(searchString) ? 0 : 1)
Run Code Online (Sandbox Code Playgroud)

juh*_*arr 8

只需添加一个ThenBy,然后订购以b开头的东西和没有的东西.如果您希望小写"b"匹配以大写"B"开头的名称,您可能还需要进行不区分大小写的比较.

adminResult.OrderBy(m => m.Last_Name.ToLower()
                          .StartsWith(searchString.ToLower()) ? 0 : 1)
           .ThenBy(m => m.Last_Name);
Run Code Online (Sandbox Code Playgroud)

此外,你可以使用OrderByDescending,你不需要? 0 : 1.