我试图将SQL查询“转换”为LINQ,直到现在没有成功。对LINQ转换的SQL查询(LEFT JOIN和NULL值)
这是我的SQL查询,返回一个结果与空值几列(正确的输出):
SELECT patient.idPatient, removed, fat.status AS FATstatus, fad.status AS FADstatus,
fa.status AS FAstatus, fdv.status AS FDVstatus, ffu.status AS FFUstatus, fmbct.status
AS FMBCTstatus, fnt.status AS FNTstatus, fs.status AS FSstatus, ftd.status AS FTDstatus
FROM patient
LEFT JOIN FormAdjuvantTreatment fat ON patient.idPatient = fat.idPatient
LEFT JOIN FormAdvancedDisease fad ON patient.idPatient = fad.idPatient
LEFT JOIN FormAnamnesis fa ON patient.idPatient = fa.idPatient
LEFT JOIN FormDemoVariables fdv ON patient.idPatient = fdv.idPatient
LEFT JOIN FormFollowUp ffu ON patient.idPatient = ffu.idPatient
LEFT JOIN FormMBCTreatment fmbct ON patient.idPatient = fmbct.idPatient
LEFT JOIN FormNeoadjuvantTreatment fnt ON patient.idPatient = fnt.idPatient
LEFT JOIN FormSurgery fs ON patient.idPatient = fs.idPatient
LEFT JOIN FormTumorDisease ftd ON patient.idPatient = ftd.idPatient
WHERE patient.idResearcher = '01-01';
这是我翻译的LINQ查询。我不返回任何结果(不正确的输出):
var query = (from u in db.Patients.DefaultIfEmpty()
join fat in db.FormAdjuvantTreatments on u.idPatient equals fat.idPatient
join fad in db.FormAdvancedDiseases on u.idPatient equals fad.idPatient
join fa in db.FormAnamnesis on u.idPatient equals fa.idPatient
join fdv in db.FormDemoVariables on u.idPatient equals fdv.idPatient
join ffu in db.FormFollowUps on u.idPatient equals ffu.idPatient
join fmbct in db.FormMBCTreatments on u.idPatient equals fmbct.idPatient
join fnt in db.FormNeoadjuvantTreatments on u.idPatient equals fnt.idPatient
join fs in db.FormSurgeries on u.idPatient equals fs.idPatient
join ftd in db.FormTumorDiseases on u.idPatient equals ftd.idPatient
where u.idResearcher == idResearcher
select new
{
u.idPatient,
u.removed,
FormAdjuvantTreatment = (fat.status == null ? "NULL" : fat.status),
FormAdvancedDisease = (fad.status == null ? "NULL" : fad.status),
FormAnamnesi = (fa.status == null ? "NULL" : fa.status),
FormDemoVariable = (fdv.status == null ? "NULL" : fdv.status),
FormFollowUp = (ffu.status == null ? "NULL" : ffu.status),
FormMBCTreatment = (fmbct.status == null ? "NULL" : fmbct.status),
FormNeoadjuvantTreatment = (fnt.status == null ? "NULL" : fnt.status),
FormSurgery = (fs.status == null ? "NULL" : fs.status),
FormTumorDisease = (ftd.status == null ? "NULL" : ftd.status),
}).ToList();
提示:?,而不是'(fat.status == NULL“NULL “:fat.status'你可以写'fat.status ??”NULL“'。你正在做内部连接这里 – 2013-03-04 23:43:35
hi lazyberezovsky, 我已经改变了内联ifs到你的建议任何线索为什么我是没有得到与SQL查询相同的结果?我在做什么错? – Ricky 2013-03-05 00:00:44
正如我上面所说的,你在做内连接而不是左连接。如果你使用左连接(语法是'join..into'),你的查询将是完全不可读的(语法是'join..into') – 2013-03-05 00:08:58