2017-03-21 2 views
0

Ich bin derzeit versucht, die folgende SQL-Abfrage zu konvertieren:Convert SQL-Abfrage mit INNER JOIN, GROUP BY, ORDER BY und MAX(), um LINQ

SELECT ref.pa_nbr, MAX(ins.ins_id) 
FROM referral ref 
INNER JOIN ins i ON ref.referral_nbr = i.referral_nbr 
INNER JOIN pm p ON i.pm_nbr = p.pm_nbr AND p.pm_group = 2 
WHERE ref.pat_nbr = @pat_nbr 
GROUP BY ref.pat_nbr 
ORDER BY ref.pat_nbr 

in einen LINQ Ausdruck. Ich habe mehrmals versucht, aber nicht die richtigen Ergebnisse erhalten. Der neueste Versuch kann im folgenden zu sehen:

var medicaidNumber = 
    (from referral in context.REFERRALs 
    join ins in context.INSs on referral.REFERRAL_NBR equals ins.REFERRAL_NBR 
    join pm in context.PMs on ins.PM_NBR equals pm.PM_NBR 
    where referral.P_NBR == patid && pm.PM_GROUP == 2 
    orderby referral.PAT_NBR 
    group referral by referral.PAT_NBR).FirstOrDefault(); 

Könnte jemand einen Blick auf das, was ich tue, und sehen, ob es einen anderen Weg, um dies zu realisieren? Jede Hilfe wird geschätzt.

+0

Woher kommt 'ind' in Ihrem sql? Oder ist das ein Tippfehler für "ins"? – juharr

+0

Woher kommt die medicaidNumber? Sie müssen das am Ende Ihrer linq Abfrage auswählen, bevor Sie FirstOrDefault anrufen –

+0

Das sollte ins sein, es war ein Tippfehler – CodePull

Antwort

0

Sie müssen in eine Variable gruppieren, mit der Sie dann die maximale Aggregation durchführen können.

from referral in context.REFERRALs 
join ins in context.INSs on referral.REFERRAL_NBR equals ins.REFERRAL_NBR 
join pm in context.PMs on ins.PM_NBR equals pm.PM_NBR 
where referral.P_NBR == patid && pm.PM_GROUP == 2 
orderby referral.PAT_NBR 
group ins.INS_Id by referral.PAT_NBR into grp 
select new { PAT_NBR = grp.Key, MaxINSId = grp.Max() };