从查询结果中对单个项目重新排序
本文关键字:新排序 排序 项目 结果 查询 单个 | 更新日期: 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