2013-01-15 37 views
0

我有一個列表:如何根據2條件對列表<User>進行排序?

List<User> users = getUsers(); 

用戶對象有2個屬性我想排序:

IsActive 
Name 

排序首先由IsActive排序,然後按名稱排序。

所以活動用戶將位於列表頂部,按名稱排序。然後列出所有非活動用戶(按字母順序排列)。

這是可能的還是我必須打破清單,然後合併它們?

這個列表中有不到100個項目,所以性能不是真正的問題。

+0

你可能要考慮的是做'GroupBy'爲'IsActive'另一種可能性,特別是如果你想進行一些邏輯只有活躍的用戶。 – NominSim

+0

爲什麼是負面投票?在我看來,這是一個有效的問題。 – Audrius

+2

@Audrius它是有效的,但它沒有適當的研究。 – NominSim

回答

12

只需使用OrderByThenBy。感謝Tim Schmelter的評論。如果您使用OrderBy,則會在列表頂部獲得IsActive == false的用戶。

var users = getUsers(). 
    OrderByDescending(u => u.IsActive). 
    ThenBy(u => u.Name). 
    ToList(); 

記住要添加到您的using指令:

using System.Linq; 
+2

您需要'OrderByDescending' 。否則,OP將首先變爲非活動狀態(_「活動用戶將位於列表的頂部,...」)。 –

+0

@TimSchmelter感謝您的評論,我編輯了我的文章。 – Mir

+0

似乎沒有工作,是'ThenBy'重新整理整個列表? – loyalflow

2
var result = users.OrderByDescending(z => z.IsActive).ThenBy(z => z.Name); 
相關問題