2010-09-07 4 views
1

Je sélectionne ai l'instruction SQL suivante:LINQ et rejoindre sur

select o.tekst as Enhet, 
     coalesce(f.Antall,0) as AntallF, 
     coalesce(f.snitt,0) as SnittF, 
     coalesce(b.antall,0) as AntallB 
     from tblhandlingsplan hp 
    inner join tblorg o on hp.eierorgid = o.orgid 
    left outer join (select f.handlingsplanid, count(t.tiltakid) as Antall, coalesce(avg(convert(float,t.status)),0) as Snitt from tblhandlingsplanforbedring f left outer join tblhandlingsplantiltak t on f.forbedringsid = t.forbedringsid group by f.handlingsplanid) f on hp.handlingsplanid = f.handlingsplanid 
    left outer join (select b.handlingsplanid, count(b.bevaringsid) as Antall from  tblhandlingsplanbevaring b group by b.handlingsplanid) b on hp.handlingsplanid = b.handlingsplanid 
where utsendingsid = 1 

qui fonctionne exactement comme je le veux ... Maintenant, je suis en train de convertir en LINQ ...

j'ai obtenu loin

from h in TblHandlingsplans 
join o in TblOrgs 
    on h.EierOrgID equals o.OrgID 
join f in TblHandlingsplanForbedrings 
    on h.HandlingsplanID equals f.HandlingsplanID into f2 
join b in TblHandlingsplanBevarings 
    on h.HandlingsplanID equals b.HandlingsplanID into b2 
where h.UtsendingsID == 1 
select new { 
    Enhet = o.Tekst, 
    AntallF = f2.Count(), 
    AntallB = b2.Count() 
} 

mais maintenant je suis coincé ... Je ne peux pas pour la vie de me comprendre comment inclure la partie moyenne de la solution SQL ... Tous les preneurs?

Je pense à pousser la chose dans un SP et le laisser avec ça ...

+0

Pouvez-vous créer une version simplifiée du SQL qui représente uniquement la partie que vous ne pouvez pas comprendre? J'ai l'impression qu'il y a une réponse simple, mais la question la complique un peu avec un tas de tables dont nous ne savons pas grand-chose. – Ocelot20

+0

Le problème vient quand je veux rejoindre la "requête anonyme" qui me donne le compte et la moyenne dans la table "tblHandlingsplanForbedring". Si je n'avais pas besoin de la moyenne, j'aurais juste rejoint directement la table, mais je ne peux pas le faire quand j'ai besoin de la valeur moyenne. –

Répondre

0
var query1 = from a in DB.Table1 
      select new 
      { 
       Id = a.Id, 
       Average = a.B.Average() 
      }; 

var query2 = from b in DB.Table2 
      join c in query1 on b.Id equals c.Id 
      select c; 

Juste il mains lâchées, il pourrait ne pas vraiment travailler, mais est-ce le genre de chose que vous essayons de faire? Cela entraînerait la création d'une seule requête SQL lors de l'utilisation de query2.