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 to share
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 to share