Pomoc s linq dotazem   otázka

VB.NET, SQL, LINQ

Dobrý den, potřeboval bych poradit se sestavením linq dotazu. Už nad tím bádám nějakou dobu a zatím nejsem schopný nic pořádného vyplodit.

o co jde?

mám tabulku:tab

skupina(string)

hodnota1(int)

hodnota2(int)

hodnota3(int)

hodnota4(int)

hodnota5(int)

výsledek dotazu nebo dotazů by měl vypadat takhle:

skupina

(sum(hodnota1)+sum(hodnota2)+sum(hodnota3)+sum(hodnota4))

sum(hodnota5)

prostě tyhle 3 hodnoty

předem díky za všechny reakce

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ještě jsem zapomněl, že by výsledky dotazu měly být sloučeny podle skupiny

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jste mě donutil pořádně se na LINQ podívat, protože tyhle věci obyčejně řeším na úrovni datbaáze stored procedurou nebo pohledem (což je rychlejší a nemusím přemýšlet, jak se to v LINQu píše).

Víceméně vyberu všechno z tabulky LinqTests v datovém kontextu dc, groupuji podle skupiny do kolekce g. Kolekce g má pro každou skupinu vlastnost Key, což je to, podle čehož groupujeme, tedy hodnota sloupce skupina, a obsahuje všechny položky, které se slučovaly. Pomocí g.Sum pak dělám součty přes ty 3 sloupce. Nevýhodou C# je, že suma se v LINQ nedá napsat přes tu "krásnou" syntaxi, ale musí se použít tak, jak ji v ukázce používám. Jako parametr dostane lambda výraz, který se vyhodnotí pro každou položku (ta se uloží do j) a vrátí součet daných tří sloupců. Protože je to Sum, sečtou se výsledky lambda výrazu ze všech řádků a to je vlastně celé.

var sums = from i in dc.LinqTests
           group i by i.Skupina into g
           select new { Skupina = g.Key, Suma = g.Sum(j => j.Hodnota1 + j.Hodnota2 + j.Hodnota3) };
foreach (var s in sums)
    Console.WriteLine("{0}:{1}", s.Skupina, s.Suma);

Kontroloval jsem to a vyplivne to velmi přímočarý SQL dotaz, myslím, že psát ho ručně, dopadlo by to úplně stejně.

SELECT SUM([t0].[Hodnota1] + [t0].[Hodnota2] + [t0].[Hodnota3]) AS [Suma], [t0].[Skupina]
FROM [dbo].[LinqTests] AS [t0]
GROUP BY [t0].[Skupina]

Vypadá to, že v nejbližší době přeložím taháky 101 LINQ Samples z MSDN ( http://msdn.microsoft.com/en-us/vbasic/b... a http://msdn.microsoft.com/en-us/vcsharp/... ) do češtiny a dám to v jazycích VB.NET i v C#, ať v tom mají všichni jasno.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Díky moc, co nejdřív se to pokusím otestovat.

Já jsem taky zvyklý spoustu věcí řešit na serveru pomocí procedur nebo funkcí, ale tady to bohužel nejde, protože aplikace na které pracuji běží nad sql compact serverem

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback