【问题标题】:C#, Sorting a LINQ result alphabetically then, sort it according to Search KeyC#,按字母顺序对 LINQ 结果进行排序,然后根据搜索键对其进行排序
【发布时间】:2013-10-27 15:09:27
【问题描述】:

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

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

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);

现在我想以一种方式对结果进行排序;开头包含 search key 的结果排在文本中其他位置包含 search key 的结果之前。

例子:

当用户输入“iP”时 过滤后的结果应该如下:

iPhone 4S、iPhone 5、多合一iP手机……

当然在正常情况下All in one iP phone是列表中的第一项。因为结果是按字母顺序排序的。但就我而言。用户的搜索键必须占主导地位。

这可以使用 C# Linq [.NET 4.5] 还是在 SQL Server 中实现?如果这可以通过 SQL 查询来完成,那也很好。

【问题讨论】:

  • 在结果集中找到搜索键的索引,并根据该索引进行排序。
  • @Mokchhya ,我也想这样做,但具体怎么做呢?在哪方面有问题?
  • @rabar,请看下面的答案。

标签: c# linq sorting search sql-order-by


【解决方案1】:

这应该可行:

var ordered = products.OrderBy(p => p.IndexOf("iP"));

【讨论】:

    【解决方案2】:
     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();
    

    【讨论】:

    • @Mokchhya。非常感谢。
    【解决方案3】:

    这应该适用于你的情况:

    products = products.OrderBy(p => p.StartsWith("iP") ? 1 : 2).ThenBy(p => p);
    

    【讨论】:

    • 如果在中间或末尾找到搜索字符串,则结果列表将不会按照 OP 的要求按升序排列...
    • 确实,一开始我只关心“iP”。
    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2011-08-29
    相关资源
    最近更新 更多