Search code examples
c#linq-to-entities

Join two linq queries on one key column to get one result set


Here I want to join the out put of the first query(one column) to the result of the 2nd query to get a one result set. How can I merge them.(CONCAT doesn't work as required. eg: var query2 = query.concat(query1);)

  var query = (from PP in _db.paymentPlans
                     join APP in _db.Applications on PP.applicationID equals      APP.ApplicationId
                     join C in _db.Courses on APP.courseID equals C.courseID
                     where PP.active == true && APP.agentID == agentID
                     orderby C.courseID ascending
                     group new {C,PP} by new {C.courseID} into totalRecievable
                      select new PdPpAppCourseModel
                     {
                         courseID = totalRecievable.Key.courseID,                            
                         totalAmount = totalRecievable.Sum(x => x.PP.totalAmount)
                     }).ToList();


            var query1=(from PD in _db.paymentDetails
                     join PP in _db.paymentPlans on PD.paymentPlanID equals PP.paymentPlanID
                     join APP in _db.Applications on PP.applicationID equals APP.ApplicationId
                     join C in _db.Courses on APP.courseID equals C.courseID
                     where PP.active == true && APP.agentID == agentID
                     orderby C.courseID ascending
                     group new { C,PD } by new { C.courseID, C.cricosCode, C.courseName } into paymentsCourseWise

                     select new PdPpAppCourseModel
                     {
                         courseID = paymentsCourseWise.Key.courseID,
                         cricosCode = paymentsCourseWise.Key.cricosCode,
                         courseName = paymentsCourseWise.Key.courseName,
                         paidAmount = paymentsCourseWise.Sum(x => x.PD.paidAmount)

                     }).ToList();

Solution

  • You could join query1 and query like this

     var result = (from q1 in query1
                join q in query on q1.courseID = q.courseID 
                select new PdPpAppCourseModel
                {
                    courseID = q1.Key.courseID,
                    cricosCode = q1.Key.cricosCode,
                    courseName = q1.Key.courseName,
                    paidAmount = q1.Sum(x => x.PD.paidAmount),
                    totalAmount = q.totalAmount
    
                }).ToList();