2015-01-05 175 views
2

有兩種類型的「文件」和「文件夾」我想按文件和文件夾分組,但文件夾必須位於頂部。我怎麼能在LINQ中做到這一點?按名稱排序組

public class DocumentItem 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
} 

List<DocumentItem> result = SPHelper.GetList().OrderBy(x => x.Type).ToList(); 
+4

這有點令人困惑。您能否提供一些您需要的樣本數據和預期輸出? – Enigmativity

+2

按類型的第一組,然後按類型降序排序。 – Asdfg

回答

2

可以使用OrderByDescending方法,通過Type得到逆向排序:

var result = SPHelper.GetList().OrderByDescending(x => x.Type).ToList(); 

不能說爲什麼你需要通過輸入您的例子分組。

+0

是的,實際上並不需要。好點子 :) – Mert

0

要麼將​​一個屬性添加到DocumentItem來表示更高的優先級,要麼將它們視爲單獨的組,並最終將它們按順序添加到最終集合中。

0

OrderByDescending將盡在這種特殊情況下的伎倆,具體如下:

List<DocumentItem> result = SPHelper.GetList().OrderByDescending(x => x.Type).ToList(); 

如果需要還需要將各組內進行排序,說按字母順序,那麼你就可以追加此查詢與ThenBy

List<DocumentItem> result = SPHelper.GetList().OrderByDescending(x => x.Type) 
          .ThenBy(x => x.Name).ToList(); 

最後一個選項可以是由布爾條件排序,如下所示:

List<DocumentItem> result = SPHelper.GetList() 
          .OrderByDescending(x => x.Type == "Folder").ToList(); 

這裏,OrderByDescending從True到False,從而將您的實體分組。