2

Entity Framework を使用してデータベースからデータを取得しています。

結果は、Search TextBox に入力された値によってフィルタリングされます。

var searchKey = this.TextBoxSearch.Text;

var products = this.databaseManager.Products.Where(x => x.Name.Contains(searchKey)).Select(x => x.Name);

次に、結果がアルファベット順にソートされます。

products = products.OrderBy(x => x);

ここで、結果を次のように並べ替えたいと思います。先頭に検索キーを含む結果は、テキスト内の別の場所に検索キーを含む結果の前に表示されます。

例:

ユーザーが「iP」と入力する と、フィルタリングされた結果は次のようになります。

iPhone 4S、iPhone 5、All in one iP Phone……

もちろん通常の場合はAll in one iP phoneがリストの最初の項目です。結果はアルファベット順にソートされるためです。しかし、私の場合。ユーザーの 検索キーは優勢でなければなりません。

これは、C# Linq [.NET 4.5] または SQL Server を使用して可能ですか? これが SQL クエリで実行できる場合も同様です。

4

3 に答える 3

2

これはうまくいくはずです:

var ordered = products.OrderBy(p => p.IndexOf("iP"));
于 2013-10-27T15:29:35.580 に答える
1
 var products = this.databaseManager.Products.Where(x => x.Name.Contains(searchKey)).Select(x => new {Name=x.Name,Index=x.Name.IndexOf(searchKey)}).OrderBy(a=>a.Index).ToList();
于 2013-10-27T15:34:08.520 に答える
-1

これはあなたの場合にうまくいくはずです:

products = products.OrderBy(p => p.StartsWith("iP") ? 1 : 2).ThenBy(p => p);
于 2013-10-27T15:26:20.283 に答える