按名称顺序分组

group by name order

有两种类型 "files" 和 "folders" 我想按文件和文件夹分组,但文件夹必须在最上面。我如何在 LINQ 中执行此操作?

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

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

您可以使用 OrderByDescending 方法按 Type:

进行反向排序
var result = SPHelper.GetList().OrderByDescending(x => x.Type).ToList();

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

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

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 排序,从而对您的实体进行分组。