LINQ 分组以展平层次结构

残酷的

我有一个像下面这样的架构:

public class Company
{
    public string Name { get; set; }
    public List<User> Users { get; set; }
}

public class User
{
    public string UserName { get; set; }
    public List<Role> Roles { get; set; }
}

public class Role
{
    public string RoleName { get; set; }
    //other properties
}

现在我想为每个用户构建一个包含逗号分隔角色并由管道分隔的字符串。

例如,如果此对象的示例 JSON 如下所示:

{
    "Name" : "Comp1",
    "Users" : [{
                 "UserName" : "User1",
                 "Roles" : [{
                                "RoleName" : "Guest"
                            },
                            {
                                "RoleName" : "OpUser"
                            }]
                },
                {
                 "UserName" : "User2",
                 "Roles" : [{
                                "RoleName" : "Manager"
                            },
                            {
                                "RoleName" : "Principal"
                            }]
                }]
}

预期的输出是

Guest,OpUser|Manager,Principal

我写了下面的 LINQ 代码来做到这一点。它有效,但我相信它可以简化。这是正确的还是可以进一步简化?

var userList = string.Join("|", company.Users.
                        SelectMany(c => c.Roles.Select(d => new { user = c.UserName, role = d.RoleName }))
                        .GroupBy(g => g.user, (key, g) => new { UserName = key, Roles = string.Join(",", g.Select(r=>r.role))})
.Select(i=>i.Roles).ToList());
你 74

为什么不简单

string.Join("|", 
    company.Users.Select(u => string.Join(",", 
        u.Roles.Select(r => r.RoleName)))
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章