我有一个这种格式的数据列表 -
User Role Code
John admin 101
John admin 101
John admin 100
Smith superadmin 150
Smith superadmin 120
Smith superadmin 130
Smith superadmin 140
Smith superadmin 160
John review 180
John review 190
John review 200
Run Code Online (Sandbox Code Playgroud)
我想根据这样的普通用户折叠它 -
User Role Code
John admin 100,101
Smith superadmin 120,130,140,150,160
John review 180,190,200
Run Code Online (Sandbox Code Playgroud)
我试过这个 -
result = userRoles.GroupBy(l => l.User).Select(u => new UserRole()
{
Code = string.Join(", ", userRoles.Where(d => d.User == u.Key)
.Select(d => d.Code)
.ToArray()),
User = u.Key,
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我已经达到了能够以上述代码的格式显示用户和代码的程度,只是想弄清楚如何适应角色,任何帮助将不胜感激。
var userRoles = new[]
{
new UserRole() { User = "John", Role = "admin", Code = "101" },
new UserRole() { User = "John", Role = "admin", Code = "101" },
new UserRole() { User = "John", Role = "admin", Code = "100" },
new UserRole() { User = "Smith", Role = "superadmin", Code = "150" },
new UserRole() { User = "Smith", Role = "superadmin", Code = "120" },
new UserRole() { User = "Smith", Role = "superadmin", Code = "130" },
new UserRole() { User = "Smith", Role = "superadmin", Code = "140" },
new UserRole() { User = "Smith", Role = "superadmin", Code = "160" },
new UserRole() { User = "John", Role = "review", Code = "180" },
new UserRole() { User = "John", Role = "review", Code = "190" },
new UserRole() { User = "John", Role = "review", Code = "200" },
};
public class UserRole
{
public string User;
public string Role;
public string Code;
}
Run Code Online (Sandbox Code Playgroud)
您可以按组两个用户和角色创建一个匿名类型。像这样的东西:
result = userRoles.GroupBy(l => new { l.User, l.Role }).Select(u => new
{
Code = string.Join(", ", u.Select(d => d.Code).Distinct().OrderBy(d => d)),
User = u.Key.User,
Role = u.Key.Role
}).ToList();
Run Code Online (Sandbox Code Playgroud)