Je convertis une procédure stockée qui fonctionne bien dans une requête linq mais ne récupère pas les enregistrements corrects. La procédure stockée se présente comme suit:Linq a quitté la jointure externe et un syndicat a renvoyé plusieurs enregistrements.
SELECT isnull(a.CertificationId, cc.CertificationId) as CertificationId,
isnull(a.cipcode, cc.CipCode) as CipCode,isnull(a.Credential, lc.Credential) as Credential,
lc.LicensingCertificationProgram, lc.IssuingOrganization, isnull(a.ab, '') as ab
FROM enrCertificationCipCodes CC INNER JOIN
lkpCertifications lc ON CC.CertificationId = lc.CertificationId
left join
(SELECT pc.CertificationId,
cc.CipCode,
lc.Credential,
lc.LicensingCertificationProgram,
lc.IssuingOrganization, ab = 'Yes',
pc.psn
FROM enrCertificationCipCodes CC INNER JOIN
lkpCertifications lc ON CC.CertificationId = lc.CertificationId
inner join (select * from enrProgramCertifications where PSN = @PSN) PC on cc.CertificationId = pc.CertificationId) as a on a.CertificationId = cc.CertificationId
where cc.CipCode = @CipCode
union
select pc.CertificationId as CertificationId, p.cipcode as CipCode, other as Credential,'' as LicensingCertificationProgram,
'' as IssuingOrganization, 'Yes' as ab
from (select * from enrProgramCertifications where CertificationId = '99999') pc join enrProgram p on pc.PSN = p.PSN
where p.CIPCode = @CipCode and p.PSN = @PSN
Union
select '99999' as CertificationId, @CipCode as CipCode, 'Other' as Credential,'' as LicensingCertificationProgram, '' as IssuingOrganization, '' as ab
order by ab desc, Credential
La requête LINQ J'est
var t = ((from a in LkpCertifications
join d in EnrProgramCertifications on a.CertificationId equals d.CertificationId into ad
from d in ad.DefaultIfEmpty()
join c in EnrCertificationCipCodes on a.CertificationId equals c.CertificationId
where c.CipCode == "52.1999"
select new {
CertificationId = a.CertificationId,
CipCode = c.CipCode,
Credential = a.Credential,
Licensing = a.LicensingCertificationProgram,
IssuingOrganization = a.IssuingOrganization,
Psn = d.PSN != null ? d.PSN : 0,
ab = d.PSN != null ? "Yes" : ""
})
.Union (from k in EnrProgramCertifications
join l in LkpCertifications on k.CertificationId equals l.CertificationId where k.PSN == 19480
select new{
CertificationId = k.CertificationId,
CipCode = "52.1999",
Credential = k.Other,
Licensing = l.LicensingCertificationProgram,
IssuingOrganization = l.IssuingOrganization,
Psn = k.PSN != null ? k.PSN : 0,
ab = k.PSN != null ? "Yes" : ""
})).ToList();
t.Dump();
Le résultat est que je reçois plus de lignes de la table jointe gauche. Si j'essaie de limiter les lignes de la table jointe gauche en le qualifiant avec le numéro PSN, je n'obtiens pas les résultats de la table lkpCertifications. Le lkpCertifications détient toutes les certifications et les enrProgramCertifications ne contiennent que celles qui ont été sélectionnées comme une commande et un ordre de livraison.
donc mes résultats actuels ressemble
Je devrais obtenir un seul élément 54 avec un 0 PSN et un 55 enregistrement avec un PSN de 19480.
Toutes les idées de le problème?