LINQ и присоединение по выбору - PullRequest
1 голос
/ 07 сентября 2010

У меня есть следующий SQL:

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

, который работает именно так, как я хочу ... Теперь я пытаюсь преобразовать это в LINQ ...

Я получилтак далеко

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()
}

однако сейчас я застрял ... Не могу понять, как включить среднюю часть из решения SQL ... Любые желающие?

Я думаю о том, чтобы засунуть все это в SP и оставить это с этим ...

1 Ответ

0 голосов
/ 07 сентября 2010
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;

Просто бесплатно, так что это может на самом деле не работать, но разве вы пытаетесь это сделать? Это приведет к тому, что при использовании query2 будет создан один SQL-запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...