2

我有一个很大的字符串列表。我目前正在通过执行搜索来处理

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

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

Potato Starch
Chicken

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

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

4

3 回答 3

8

您可以按索引排序,因此字符串以搜索开头:

.Where(x => x.Contains(search)).OrderBy(x => x.IndexOf(search)).ToArray()
于 2012-08-18T04:28:11.577 回答
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();
于 2012-08-18T04:32:06.863 回答
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()
于 2012-08-18T04:27:35.107 回答