2015-01-05 137 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,从而将您的实体分组。