[ nowa @ 19.06.2008. 10:50 ] @
Kako prevesti ovaj SQL upit u ekvivalentan LINQ? select i.Name , sum (b.Quantum) from Linq.dbo.Icecream i join Linq.dbo.Bill b on i.IcecreamId = b.IcecreamID group by i.Name, B.IcecreamID; |
[ nowa @ 19.06.2008. 10:50 ] @
[ mmix @ 20.06.2008. 10:57 ] @
Imas par nacina, najkraci i najvise u duhu L2S-a je:
Code: sto generise sledeci SQL upit:var xx = from i in db.Icecreams select new { i.Name, suma = i.Bills.Sum(b => b.Quantum) }; Code: SELECT [t0].[Name], ( SELECT SUM([t1].[Quantum]) FROM [dbo].[Bill] AS [t1] WHERE [t1].[IcecreamId] = [t0].[IcecreamID] ) AS [suma] FROM [dbo].[Icecream] AS [t0] Ako bas hoces da forsiras inner join i da dobijes SQL upit kakav si naveo, onda je oblik sledeci (s tim sto se krece od tebele koja se sumira): Code: sto generise sledeci skriptvar xx = from b in db.Bills group b by b.Icecream.Name into gb select new { Name = gb.Key, suma = gb.Sum(a => a.Quantum) }; Code: SELECT SUM([t0].[Quantum]) AS [suma], [t1].[Name] FROM [dbo].[Bill] AS [t0] INNER JOIN [dbo].[Icecream] AS [t1] ON [t1].[IcecreamID] = [t0].[IcecreamId] GROUP BY [t1].[Name] U oba slucaja ces dobiti isti rezultat (mozda drugacije sortiran posto nemas orderby a ova dva primera koriste razlicite tabele kao polazne) [ mmix @ 20.06.2008. 11:16 ] @
I da, pretpostavke
![]() Drugo resenje podrazumeva da su ti imena sladoleda jedinstvena, ako nisu onda mora i IcecreamId da udje u groupby, sledeci query: Code: var xx = from b in db.Bills group b by new { b.Icecream.Name, b.IcecreamId } into gb select new { gb.Key.Name, suma = gb.Sum(a => a.Quantum) }; sto daje sledeci sql Code: SELECT SUM([t0].[Quantum]) AS [suma], [t1].[Name] FROM [dbo].[Bill] AS [t0] INNER JOIN [dbo].[Icecream] AS [t1] ON [t1].[IcecreamID] = [t0].[IcecreamId] GROUP BY [t1].[Name], [t0].[IcecreamId] I poslednja pretpostavka je da su ti tabele IceCream i Bill u db kontekstu uvezane relacijom. Ako nisu mora puna forma L2S query-a: Code: var xx = from i in db.Icecreams join b in db.Bills on i.IcecreamID equals b.IcecreamId group b by new { i.Name, i.IcecreamID } into gb select new { gb.Key.Name, suma = gb.Sum(a => a.Quantum) }; sto generise SQL: Code: SELECT SUM([t1].[Quantum]) AS [suma], [t0].[Name] FROM [dbo].[Icecream] AS [t0] INNER JOIN [dbo].[Bill] AS [t1] ON [t0].[IcecreamID] = [t1].[IcecreamId] GROUP BY [t0].[Name], [t0].[IcecreamID] [ nowa @ 23.06.2008. 19:01 ] @
Hvala puno, uz pretpostavke radi savrseno!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|