2013-01-16 119 views
1

我无法使用组连接的结果,然后进一步将连接应用于其他表。如何使用组连接结果使用LINQ连接另一个表?

我的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 

       } 
       ); 

,但现在这样的结果完全不还由我创造与其他联接表。我想问问如何进一步加入?任何线索?

+0

你尝试分组之前加入? – mipe34

+0

是的,我也试过,但后来我也无法查询其他连接的表,如错误所述,无效的组连接。 –

回答

1

你需要的东西是这样的:

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 
     }); 
+0

linq的结果对于像我这样的天真的程序员来说相当复杂。 –

+0

在这种情况下,你可以创建一个存储过程来返回你想要的结果,通过函数import将它添加到你的数据上下文并直接调用它。 – RePierre

+0

谢谢你这么多,我也会这样做。 –