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

时间:2012-04-30 23:24:13

标签: c# .net plsql

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

我有一个数据库查询,它返回按名称排序的结果列表。结果将始终包含一个名为“Main Item”的项目,该项目始终需要首先出现在结果列表中。此项目不会被数据库中的单独字段标记,因此需要通过名称进行标识。

例如,如果结果如下:

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

我需要按字母顺序排序,但除了“Main Item”首先出现之外:

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

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

3 个答案:

答案 0 :(得分:3)

您可以堆叠订单:

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

修改

列表已预先排序,在该情况下只需要第二个OrderBy

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

答案 1 :(得分:0)

尝试此查询:

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

答案 2 :(得分:0)

我喜欢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);