【问题标题】:Join two linq queries on one key column to get one result set在一个键列上加入两个 linq 查询以获得一个结果集
【发布时间】:2017-03-23 17:11:21
【问题描述】:

在这里,我想将第一个查询(一列)的输出连接到第二个查询的结果,以获得一个结果集。如何合并它们。(CONCAT 不能按要求工作。例如: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();

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    你可以加入 query1 并像这样查询

     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();
    

    【讨论】:

    • 嗨,非常感谢您抽出宝贵的时间分享知识。但不幸的是,我收到错误“无法创建类型为'studentAgentManagementSystem2016.Models.PdPpAppCourseModel'的常量值。在此上下文中仅支持原始类型或枚举类型。”有什么建议吗?
    • 可能和这个问题有关:stackoverflow.com/questions/18929483/…。我编辑了我的答案
    • 但现在它给出了这个错误; “类型‘sManagementSystem.Models.PdPpAppCourseModel’出现在单个 LINQ to Entities 查询中的两个结构上不兼容的初始化中。一个类型可以在同一个查询中的两个位置初始化,但前提是在两个位置都设置了相同的属性并且那些属性的设置顺序相同。”
    • 好消息我能够通过为第一个查询创建单独的模型来解决问题。TriV 非常感谢您的帮助。
    猜你喜欢
    • 2019-09-24
    • 2018-04-24
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多