Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用组联接结果使用LINQ联接其他表?_Sql_Linq_C# 4.0_Entity Framework 4 - Fatal编程技术网

Sql 如何使用组联接结果使用LINQ联接其他表?

Sql 如何使用组联接结果使用LINQ联接其他表?,sql,linq,c#-4.0,entity-framework-4,Sql,Linq,C# 4.0,Entity Framework 4,我无法使用组联接的结果,然后将联接进一步应用于其他表 我的SQL查询是: SELECT * FROM [SpectrumNew].[dbo].[MortgageApplication] M INNER JOIN SpectrumNew.dbo.Applicants A ON A.ApplicantMortgageApplicationId = M.MortgageApplicationId INNER JOIN SpectrumNew.dbo.SubjectPr

我无法使用组联接的结果,然后将联接进一步应用于其他表

我的SQL查询是:

SELECT *
FROM   
    [SpectrumNew].[dbo].[MortgageApplication] M
INNER JOIN 
    SpectrumNew.dbo.Applicants A ON A.ApplicantMortgageApplicationId = M.MortgageApplicationId
INNER JOIN 
    SpectrumNew.dbo.SubjectProperty SP ON  SP.PropertyMortgageApplicationId = M.MortgageApplicationId
INNER JOIN 
    SpectrumNew.dbo.MortgageConditionsCommitment CC ON  CC.MortgageApplicationId = m.MortgageApplicationId
INNER JOIN 
    SpectrumNew.dbo.MortgageLoanStatusAndTrackingNotes T ON  T.MortgageTrackingMortgageApplicationId = M.MortgageApplicationId
INNER JOIN 
    (SELECT 
        MAX(MortgageTrackingDate) AS MaxDate,
        MortgageTrackingMortgageApplicationId
     FROM   
        [SpectrumNew].[dbo].[MortgageLoanStatusAndTrackingNotes]
     GROUP BY
        MortgageTrackingMortgageApplicationId) Q ON  Q.MortgageTrackingMortgageApplicationId = M.MortgageApplicationId
到目前为止,我所做的是:

 var q = (from mortgageloan in context.MortgageLoanStatusAndTrackingNotes
                 group mortgageloan by mortgageloan.MortgageTrackingMortgageApplicationId into g
                 let maxdate = g.Max(date => date.MortgageTrackingDate)
                 select new
                 {
                     MortgId = g.Key,
                     TrackingDate = g.FirstOrDefault(val => val.MortgageTrackingDate == maxdate).MortgageTrackingDate

                 }
                 );

但现在,我不再使用这个结果来创建与其他表的联接。我想问一下如何进一步加入?有什么线索吗?

你需要这样的东西:

var groups = context.MortgageLoanStatusAndTrackingNotes
    .GroupBy(x => x.MortgageTrackingMortgageApplicationId)
    .Select(g => new 
    {
        MortgageTrackingMortgageApplicationId = g.Key,
        MaxDate = g.Max(date => date.MortgageTrackingDate)
    });

var result = context.MortgageApplications
    .Join(context.Applicants,
        m => m.MortgageApplicationId,
        a => a.MortgageApplicationId,
        (m, a) => new 
        {
            MortgageApplication = m,
            Applicant = a
        })
    .Join(context.SubjectProperties,
        x => x.MortgageApplication.MortgageApplicationId,
        sp => sp.PropertyMortgageApplicationId,
        (x, sp) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = sp
        })
    .Join(context.MortgageConditionsCommitments,
        x => x.MortgageApplication.MortgageApplicationId,
        cc => cc.MortgageApplicationId,
        (x, cc) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = cc
        })
    .Join(context.MortgageLoanStatusAndTrackingNotes,
        x => x.MortgageApplication.MortgageApplicationId,
        t => t.MortgageTrackingMortgageApplicationId,
        (x, t) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = x.MortgageConditionsCommitment,
            MortgageLoanStatusAndTrackingNotes = t
        })
    .Join(groups,
        x => x.MortgageApplication.MortgageApplicationId,
        g => g.MortgageApplicationId,
        (x, g) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = x.MortgageConditionsCommitment,
            MortgageLoanStatusAndTrackingNotes = t,
            MortgageLoanStatusGroup = g
        });

你需要这样的东西:

var groups = context.MortgageLoanStatusAndTrackingNotes
    .GroupBy(x => x.MortgageTrackingMortgageApplicationId)
    .Select(g => new 
    {
        MortgageTrackingMortgageApplicationId = g.Key,
        MaxDate = g.Max(date => date.MortgageTrackingDate)
    });

var result = context.MortgageApplications
    .Join(context.Applicants,
        m => m.MortgageApplicationId,
        a => a.MortgageApplicationId,
        (m, a) => new 
        {
            MortgageApplication = m,
            Applicant = a
        })
    .Join(context.SubjectProperties,
        x => x.MortgageApplication.MortgageApplicationId,
        sp => sp.PropertyMortgageApplicationId,
        (x, sp) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = sp
        })
    .Join(context.MortgageConditionsCommitments,
        x => x.MortgageApplication.MortgageApplicationId,
        cc => cc.MortgageApplicationId,
        (x, cc) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = cc
        })
    .Join(context.MortgageLoanStatusAndTrackingNotes,
        x => x.MortgageApplication.MortgageApplicationId,
        t => t.MortgageTrackingMortgageApplicationId,
        (x, t) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = x.MortgageConditionsCommitment,
            MortgageLoanStatusAndTrackingNotes = t
        })
    .Join(groups,
        x => x.MortgageApplication.MortgageApplicationId,
        g => g.MortgageApplicationId,
        (x, g) => new
        {
            MortgageApplication = x.MortgageApplication ,
            Applicant = x.Applicant,
            SubjectProperty = x.SubjectProperty,
            MortgageConditionsCommitment = x.MortgageConditionsCommitment,
            MortgageLoanStatusAndTrackingNotes = t,
            MortgageLoanStatusGroup = g
        });

分组前是否尝试联接?是的,我也尝试过,但随后我无法查询其他联接表,如错误所示,无效的组联接。您是否尝试在分组前联接?是的,我也尝试过,但随后我也无法查询其他联接表,如错误所示,无效的组联接。对于像我这样天真的程序员来说,linq结果非常复杂。在这种情况下,您可以创建一个存储过程来返回所需的结果,通过函数导入将其添加到您的数据上下文并直接调用。非常感谢,我也将这样做。对于像我这样天真的程序员来说,linq结果非常复杂。在这种情况下,您可以创建一个存储过程来返回您想要的结果,通过函数导入将它添加到您的数据上下文中,并直接调用它。非常感谢,我也将这样做。