我有一个看起来像这样的类:
class UserProfile { public int Id; public int? ParentId; public string Name; public string Role; }
每个 UserProfile 都是用户或管理员。每个用户可能是单个管理员的孩子,其 Id 存储在用户的 ParentId 中。下面是一个例子:
IEnumerable<UserProfile> users = new List<UserProfile>{
new UserProfile(){Id = 1, ParentId = null, Name = "Admin1", Role = "Admin" },
new UserProfile(){Id = 2, ParentId = 1, Name = "User2", Role = "Admin" },
new UserProfile(){Id = 3, ParentId = 1, Name = "User3", Role = "Admin" },
new UserProfile(){Id = 3, ParentId = null, Name = "Admin2", Role = "Admin" },
new UserProfile(){Id = 4, ParentId = 3, Name = "User4", Role = "Admin" },
new UserProfile(){Id = 5, ParentId = null, Name = "User5", Role = "Admin" },
new UserProfile(){Id = 6, ParentId = 3, Name = "User6", Role = "Admin" },
};
我需要重新排列此列表或创建另一个列表,以便按特定顺序排列:所有管理员及其用户:
- Admin1(完整详细信息)
- 用户2(完整详细信息)
- 用户 3(完整详细信息)
- 用户 5(完整详细信息)
- Admin2(完整详细信息)
- 用户 4(完整详细信息)
- 用户 6(完整详细信息)
我试图先将它们分开,但我不知道如何以所需的顺序合并它们。
var adminsOnly = users.Where(p => p.Role.Equals("Admin")).OrderBy(p => p.Id);
var usersOnly = users.Where(p => p.Role.Equals("User")).OrderBy(p => p.Id);
非常感谢。
注意:可以有没有管理员的用户,也可以有没有用户的管理员。