2

文字列の大きなリストがあります。私は現在、次のことを行って検索を処理しています

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

これにより、必要なすべての結果が得られますが、順序が悪くなります。たとえば、「ch」を検索すると、次のようになります。

Potato Starch
Chicken

両方にchが含まれているので、両方を表示したいのですが、chで始まるので、Chickenを配列の最初に配置したいと思います。

検索文字列で始まる文字列が配列の先頭になるように結果を並べ替える方法は何ですか?

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 / entity)の場合、エンジンは結果をSQLに変換する方法を知らないため、最初に結果を列挙する必要があることに注意してください。

.Where(x => x.Contains(search))
.AsEnumerable()
.OrderBy(x => x.StartsWith(search) ? 0 : 1)
.ThenBy(x => x)
.ToArray()
于 2012-08-18T04:27:35.107 に答える