
Telemach [ Pretorianin ]
LINQ - co i jak?
Czy mógłby mi ktoś powiedzieć, co różni LINQ od standardowego dostępu do SQLa?
Wiem, że definiujemy klasę i następnie w elegancki i łatwy sposób "dobieramy" się do interesujących nas danych.
Tylko co oprócz tego? W czym drzemie potęga LINQ? W szybkości?
I teraz mój problem. Otóż dopiero trenuję w LINQ i proste zapytanie wykonują się bez problemu. Niestety mam problem z przeróbką tego:
[Kod SQL]
SELECT
dbo.wydarzenia.wydarzenie_tytul,
dbo.wydarzenia.wydarzenie_data,
dbo.wydarzenia.wydarzenie_id,
SUM(dbo.wydarzenia_glosy.wyd_glos_wartosc) AS Total,
COUNT(dbo.wydarzenia_glosy.wyd_glos_id) AS Votes,
dbo.wydarzenia.wydarzenie_miniatura
FROM dbo.wydarzenia INNER JOIN
dbo.wydarzenia_glosy ON dbo.wydarzenia.wydarzenie_id = dbo.wydarzenia_glosy.wydarzenie_id
GROUP BY dbo.wydarzenia.wydarzenie_tytul, dbo.wydarzenia.wydarzenie_data, dbo.wydarzenia.wydarzenie_id, dbo.wydarzenia.wydarzenie_miniatura
ORDER BY SUM(dbo.wydarzenia_glosy.wyd_glos_wartosc) / COUNT(dbo.wydarzenia_glosy.wyd_glos_id) DESC
Mógłby mi ktoś pomóc?
Telemach [ Pretorianin ]
^
legrooch [ MPO Squad Member ]
LINQ umożliwia zunifikowany dostęp do zarówno kolekcji, obiektów jak i baz danych. Dzięki temu nie trzeba znać mechanizmów różnych providerów/namespaców oraz używać Ifów/Forów do otrzymania rezultatu (szybsze działanie po stronie serwera).
Telemach [ Pretorianin ]
Rozumiem mniej więcej :)
Doszedłem póki co do tego:
Dim warto = From w In db.wydarzenia_glosies, g In db.wydarzenias _
Where w.wydarzenie_id = g.wydarzenie_id _
Group w By w.wydarzenie_id Into Group Select _
wydarzenie_id, _
sumsal = Group.Sum(Function(w) w.wyd_glos_wartosc), _
total = Group.Count(Function(w) w.wyd_glos_id) _
Order By sumsal / total Descending
I zwraca mi sumę i ilość głosów na wydarzenie_id. Tylko teraz chciałbym jeszcze uzyskać wydarzenie_tytul z wydarzenias i nie wiem jak to wszystko w tym LINQ skonstruować.
Telemach [ Pretorianin ]
^
Lukxxx [ Generaďż˝ ]
jeśli chodzi o LINQ to SQL to poczytaj coś o ORM-ach:

legrooch [ MPO Squad Member ]
Telemach ==> Stwórz to najpierw w TSQL :)
Telemach [ Pretorianin ]
Doszedłem do tego w końcu:
From wyd In db.wydarzenia_glosies _
Join tyt In db.wydarzenias On wyd.wydarzenie_id Equals tyt.wydarzenie_id _
Group By tyt.wydarzenie_tytul, tyt.wydarzenie_id, tyt.wydarzenie_miniatura, tyt.wydarzenie_data _
Into Rate = Sum(wyd.wyd_glos_wartosc), Votes = Count() _
Order By Rate / Votes Descending
@legrooch
Powiedz mi czy dobrze rozumiem. Tam, gdzie można należy stosować LINQ, ale przy bardziej złożonych zapytaniach lepiej pozostać przy zwykłym odpytywaniu?
legrooch [ MPO Squad Member ]
Telemach ==> Odkąd zacząłem bawić się LINQ nie chce mi się używać innych metod :)
Na ogół z poziomu aplikacji i tak wybierasz, co chcesz. Tu masz lepszą i prostszą komunikację ze źródłem danych :)
Wyobraź sobie czytanie pliku i poszukiwanie konkretnych linii :)