按名称顺序分组

时间:2015-01-05 23:18:33

标签: c# linq

有两种类型"文件"和"文件夹"我想按文件和文件夹分组,但文件夹必须在顶部。我怎么能在LINQ中做到这一点?

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用OrderByDescending方法按Type进行反向排序:

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

不能说你为什么需要在你的例子中按类型分组。

答案 1 :(得分:0)

向DocumentItem添加一个属性以表示更高的优先级,或者将它们视为单独的组,最后按顺序将它们添加到最终集合中。

答案 2 :(得分: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排序,从而对您的实体进行分组。