Avatar billede htm Nybegynder
12. oktober 2009 - 09:12 Der er 7 kommentarer og
1 løsning

Linq to SQL left join og count

Hej,

Jeg har behov for at hente alt ud fra tabel1 og så et antal hvor mange gange nøglen fremtræder i tabel2 og tabel3

I SQL vill jeg gøre det på denne måde:

select t1.productNumber,COUNT(t2.productNumber),COUNT(t3.productNumber)
from tabel1 t1
left join tabel2 t2 on t1.productNumber = t2.productNumber
left join tabel3 t3 on t1.productNumber = t3.productNumber
group by t1.productNumber

Hvordan opnår jeg det i Linq?
Avatar billede sirius Nybegynder
12. oktober 2009 - 10:26 #1
i LINQ to SQL vil du have nogle properties på din t1 entitet, herop kan du så bruge deres Count property.

f.eks.

t1.t2s.Count
Avatar billede htm Nybegynder
12. oktober 2009 - 11:47 #2
Kan du ikke lave et eksempel på hvordan min sql sætning bliver oversat til linq to sql?
Avatar billede sirius Nybegynder
12. oktober 2009 - 12:37 #3
det er lidt svært uden at vide mere om hvordan dit tabeldesign er.

Kan se at du også har en group by med i din forespørgelse, er det fordi at der findes flere rækker i tabel1 med samme productNumber?
Avatar billede htm Nybegynder
12. oktober 2009 - 14:46 #4
Der findes 0 eller flere rækker med samme produktnummer i tabel 2 og 3.
Tabel1 er tabel med productnumber og description.
Avatar billede sirius Nybegynder
12. oktober 2009 - 15:08 #5
ok, så burde du kunne skrive noget i stil med:

var result = from t1 in dataContext.Tabel1
select new
{
ProductNumber = t1.productNumber,
AntalT2 = t1.tabel2.Count,
AntalT3 = t1.tabel3.Count
};
Avatar billede htm Nybegynder
12. oktober 2009 - 15:26 #6
Nu kører det på en SQL Server Compact edition, hvor der ikke er mulighed for at definere foreign keys. Hvordan klares den så?
Avatar billede sirius Nybegynder
12. oktober 2009 - 20:58 #7
du skulle gerne kunne definere foreign keys i din linq 2 sql model selvom det ikke er muligt at gøre det i din sql server.
Avatar billede htm Nybegynder
26. januar 2015 - 14:18 #8
Jeg er ikke sikker på hvad udfaldet blev af dette spørgsmål, men kan se at det stadig er åbent.
Lægger lige et svar selv så jeg kan lukke, men sirius hvis du vil have point for et 5 år gammelt spørgsmål så læg et svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester