我有一个如下所示的类:
class UserProfile { public int Id; public int? ParentId; public string Name; public string Role; }
每个用户配置文件都是用户或管理员。每个用户可能是单个管理员的子代,其 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);
非常感谢。
注意:可以有没有管理员的用户,也可以有没有用户的管理员。
最佳答案
var users = users.OrderBy(p => p.ParentId ?? p.Id).ThenBy(p => p.Role);
关于c# - 如何构建这个 LINQ 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275694/