gpt4 book ai didi

c# - 如何构建这个 LINQ 表达式?

转载 作者:行者123 更新时间:2023-12-03 03:02:37 25 4
gpt4 key购买 nike

我有一个如下所示的类:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com