public static void CombineSelectExpression(SchoolContext ctx) { Expression <Func <Course, CourseModel> > courseSelect = course => new CourseModel { CourseId = course.CourseID, Title = course.Title, Credits = course.Credits }; Expression <Func <Enrollment, EnrollmentBaseModel> > enrollmentSelect = enrollment => new EnrollmentBaseModel { EnrollmentId = enrollment.EnrollmentID, Grade = enrollment.Grade }; Expression <Func <Student, StudentModel> > studentSelect = student => new StudentModel { StudentId = student.ID, FirstMidName = student.FirstMidName, LastName = student.LastName }; Expression <Func <Enrollment, CourseEnrollmentModel> > enrollmentWithStudentsSelect = enrollment => new CourseEnrollmentModel { }; enrollmentWithStudentsSelect = enrollmentWithStudentsSelect.InheritInit(enrollmentSelect); enrollmentWithStudentsSelect = enrollmentWithStudentsSelect.AddMemberInit( enrollmentEntity => enrollmentEntity.Student, enrollmentModel => enrollmentModel.Student, studentSelect ); enrollmentWithStudentsSelect = enrollmentWithStudentsSelect.AddMemberInit( enrollmentEntity => enrollmentEntity.Grade, enrollmentModel => enrollmentModel.GradeString, EnumExpressionExtensions.GetEnumToStringExpression <Grade?>(grade => grade.ToString()) ); Expression <Func <Course, CourseFullModel> > courseFullSelect = course => new CourseFullModel { }; courseFullSelect = courseFullSelect.InheritInit(courseSelect); courseFullSelect = courseFullSelect.AddMemberInit( courseEntity => courseEntity.Enrollments, courseModel => courseModel.Enrollments, enrollmentWithStudentsSelect ); var courses = ctx.Courses.Select(courseFullSelect).ToList(); }
Expression <Func <Enrollment, EnrollmentBaseModel> > ISelectExpression <Enrollment, EnrollmentBaseModel> .GetSelectExpression() { Expression <Func <Enrollment, EnrollmentBaseModel> > select = enrollment => new EnrollmentBaseModel { EnrollmentId = enrollment.EnrollmentID, Grade = enrollment.Grade, }; select = select.AddMemberInit(e => e.Grade, r => r.GradeString, EnumExpressionExtensions.GetEnumToStringExpression <Grade?>(g => g.ToString())); return(select); }