SelectMany applies to 3 lists

I need to create a list of objects, OrganizationEnrolment, created using three Entity Framework objects (User, EnrolmentType and OrganizationEnrolment):

List<OrganizationEnrolment> organizationEnrolments = 
  context.Organizations
  .SelectMany(x => context.Users)
  .SelectMany(x => context.EnrolmentTypes)
  .Select(y => new OrganizationEnrolment {
     EnrolmentType = enrolmentType
     Organization = organization,
     User = user
   })

      

My problem is that after selecting SelectMany, will you get the username, organization and user from 3 concatenated table? Please note that the following code:

EnrolmentType = enrolmentType,
Organization = organization,
User = user

      

doesn't work because I don't have enrolmentType, organization and user variables.

+3


source to share


2 answers


The query syntax can be used to get all of these variables:

from o in context.Organizations
from u in context.Users
from et in context.EnrolmentTypes
select new OrganizationEnrolment {
     EnrolmentType = et
     Organization = o,
     User = u
   }

      

Each local range variable will be visible in the select clause.



Lambda syntax (tested with EF6):

context.Organizations.SelectMany(
          o => context.Users.SelectMany(
              u => context.EnrolmentTypes.Select(
                  et => new OrganizationEnrolment {
                       EnrolmentType = et
                       Organization = o,
                       User = u
                  })
              )
         )

      

+1


source


Is this what you are looking for?

var query= from o in context.Organizations
           from u in context.Users
           from t incontext.EnrolmentTypes
           select new OrganizationEnrolment {
                      EnrolmentType = t,
                      Organization = o,
                      User = u
                   };

      



Using method syntax:

var query= context.Organizations.SelectMany(o=>context.EnrolmentTypes
                                .SelectMany(t=>context.Users
                                .Select(u=>new OrganizationEnrolment {
                                                   EnrolmentType = t,
                                                   Organization = o,
                                                    User = u
                                                  })));

      

+2


source







All Articles