我有以下数据
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)
答案 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();