Sql 如何使用组联接结果使用LINQ联接其他表?
我无法使用组联接的结果,然后将联接进一步应用于其他表 我的SQL查询是: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
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结果非常复杂。在这种情况下,您可以创建一个存储过程来返回您想要的结果,通过函数导入将它添加到您的数据上下文中,并直接调用它。非常感谢,我也将这样做。