从查询结果中对单个项目重新排序

本文关键字:新排序 排序 项目 结果 查询 单个 | 更新日期: 2023-09-27 18:32:42

我正在寻找一个优雅的解决方案来解决我遇到的排序问题。

我有一个数据库查询,它返回按名称排序的结果列表。 结果将始终包含一个名为"主项目"的项目,该项目始终需要首先出现在结果列表中。 此项未由数据库中的单独字段标记,因此需要按名称标识。

例如,如果结果如下:

"A Item"
"B Item"
"Main Item"
"Y Item"
"Z Item"

我需要保留字母顺序排序,但除了"主要项目"首先出现:

"Main Item"
"A Item"
"B Item"
"Y Item"
"Z Item"

返回此数据的查询是用 pl/sql 编写的,我可以修改查询或在 .Net 端执行某些操作,其中我有一个包含结果对象集合的 IEnumerable 对象。

从查询结果中对单个项目重新排序

您可以堆叠订单:

query
  .OrderBy(item => item.Title) // alphabetical
  .OrderByDescending(item => item.Title == "Main Item"); // put Main Item first, bool==true

编辑

列表已预先排序,在这种情况下只需要第 2 个OrderBy

query.OrderByDescending(item => item.Title == "Main Item");
我喜欢

payo 的答案,但由于它第二次遍历整个集合而不是简单的元素移动逻辑,我认为发布这个答案也是合适的:

List<MyClass> items = GetItemsFromDB();
int i = items.FindIndex(x => x.Name == "Main Item");
MyClass mainItem = items[i];
items.RemoveAt(i);
items.Insert(0, mainItem);

请尝试以下查询:

SELECT * 
FROM MyTable 
ORDER BY 
        CASE 
            WHEN Name = 'Main Item' THEN ' ' 
            ELSE Name 
        END