2

我正在使用实体框架从数据库中检索数据。

结果由在搜索文本框中输入的值过滤。

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、多合一iP手机......

当然,在正常情况下,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 回答