我有很多字符串。我目前正在处理搜索
.Where(x => x.Contains(search)).ToArray()
这可以获得我想要的所有结果,但顺序很差。例如,搜索“ch”可能会出现:
Potato Starch
Chicken
因为它们都包含ch,所以我希望它们都显示出来,但是我希望Chicken在数组中排在第一位,因为它以ch开头。
我可以采用哪些方法重新排序我的结果,以便以搜索字符串开头的字符串位于数组的开头?
答案 0 :(得分:8)
您可以按索引排序,因此从开头的搜索开始具有字符串:
.Where(x => x.Contains(search)).OrderBy(x => x.IndexOf(search)).ToArray()
答案 1 :(得分:2)
您可以添加一个简单的 OrderBy 字段,将相关结果放在顶部:
.Where(x => x.Contains(search))
.OrderBy(x => x.StartsWith(search) ? 0 : 1)
.ThenBy(x => x)
.ToArray()
请注意,如果这是一个数据库查询(Linq to SQL / entities),您首先需要枚举结果,因为引擎不知道如何将其转换为SQL:
.Where(x => x.Contains(search))
.AsEnumerable()
.OrderBy(x => x.StartsWith(search) ? 0 : 1)
.ThenBy(x => x)
.ToArray()
答案 2 :(得分:2)
尝试:
List<string> lis=new List<string>(){"Potato Starch","Chicken","gcha","vgfchi","njjh"};
string search = "ch";
List<string> temp = new List<string>();
temp = lis.Where(x => x.Contains(search)).OrderBy(x => x.IndexOf(search)).ToList();