2013-01-16 52 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

謝謝你這麼多,我也會這樣做。 –