user9124444
user9124444

Reputation:

OData join in a many to many

I have a many-to-many relation

class User 
{
    int Id { get; }
    int Name { get; }

    List<UserClass> UserClasses { get; }
}

class Class
{
    int Id { get; }
    int Name { get; }

    List<UserClass> ClassUsers { get; }
}

class UserClass
{
    int UserId { get; }
    User User { get; }

    int ClassId { get; }
    Class Class{ get; }
}

And am trying to create a query which will fetch me a grouping of classes per user, the result should be something like this

[
  {
      UserId: '1',
      Classes: [{
         Name: 'c1',
      },{
         Name: 'c2',
      },{
         Name: 'c3',
      },{
         Name: 'c4',
      }],          
  },
  {
      UserId: '2',
      Classes: [{
         Name: 'c2',
      },{
         Name: 'c7',
      }],          
  },
]

Upvotes: 0

Views: 434

Answers (1)

Chris Danna
Chris Danna

Reputation: 1264

If your model isn't exposed as User having a List<Class> Classes then you will need to keep the junction object in the query.

Users?$select=UserId&$expand=UserClasses($expand=Class($select=Name))

should return

[
  {
    "UserId": "1",
    "UserClasses": [
      {
        "Class": { "Name": "c1" }
      },
      {
        "Class": { "Name": "c2" }
      },
      {
        "Class": { "Name": "c3" }
      },
    ]
  },
  {
    "UserId": "2",
    "UserClasses": [
      {
        "Class": { "Name": "c1" }
      },
      {
        "Class": { "Name": "c4" }
      },
    ]
  }
]

Upvotes: 1

Related Questions