如何对字符串进行排序,以便首先以搜索词开头的字符串?

时间:2012-08-18 04:22:16

标签: c# search sorting

我有很多字符串。我目前正在处理搜索

.Where(x => x.Contains(search)).ToArray()

这可以获得我想要的所有结果,但顺序很差。例如,搜索“ch”可能会出现:

Potato Starch
Chicken

因为它们都包含ch,所以我希望它们都显示出来,但是我希望Chicken在数组中排在第一位,因为它以ch开头。

我可以采用哪些方法重新排序我的结果,以便以搜索字符串开头的字符串位于数组的开头?

3 个答案:

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