【问题标题】:How do I merge objects back together after a SelectMany in System.Linq.Dynamic or maybe different solution all together?如何在 System.Linq.Dynamic 中的 SelectMany 或不同的解决方案之后将对象重新合并在一起?
【发布时间】:2012-10-03 02:52:41
【问题描述】:

我正在尝试在集合内的集合中选择几个字段。 Roles->Users (name and ID) 我能够使用 select many 获得扁平化数据,但现在我需要将它合并回一个集合对象,以便我的 json 格式正确。如果可能的话,我想在动态 linq 中执行此操作,否则我可能不得不手动将对象重新合并在一起。任何帮助都会很棒。

User->User_Roles->Roles(以User_Role为连接表的多对多关系)

q = query.SelectMany("USER_ROLES","new (inner as myUSER,outer as myROLE) ").SelectD("new (myROLE.ID as ROLE_ID, new( myROLE.NAME, myUSER.USER.FIRSTNAME,myUSER.USER.ID)as user)")

结果如下所示:

 Role A-> User A
 Role A-> User B    ..notice the repeat of "Role A" 
 Role A-> User C

应该是

     Role A -> User A
             + User B
             + User C

【问题讨论】:

    标签: linq linq-to-entities dynamic-linq


    【解决方案1】:

    我是 JSON 菜鸟,但假设您已经拥有一个项目集合

    Role A-> User A
    Role A-> User B
    Role A-> User C
    Role B-> User D
    Role B-> User E
    Role B-> User F
    Role C-> User G
    Role C-> User H
    Role C-> User I
    

    我们来命名

    UserRoleCollection
    

    随便用

    var res = UserRoleCollection.GroupBy(item => item.Role);
    

    你会得到一个像这样的IGrouping<TRole, TUser>

    Role A ->     User A
                  User B
                  User C
    Role A ->     User D
                  User E
                  User F
    ... and so on
    

    【讨论】:

      【解决方案2】:

      在 SelectMany 之前使用 GroupBy 以获得您正在寻找的结果。

      类似:

      User_Roles.GroupBy(r => r.Roles.Role)
                  .Select(g => new { Role = g.Key, Users = g.SelectMany(u => u.Users.Name) });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        相关资源
        最近更新 更多