Czy Aggregate
zapytania VB.NET jest pełen wad stosowany jako pierwszej (zewnętrznej) klauzuli wyrażenia Linq z wielokrotności Into
klauzule ponieważ każda klauzula Into
jest wykonywany oddzielnie?Czy Aggregate jest fatalnie wadliwy, ponieważ każdy z nich jest wykonywany osobno?
z „oczywiste” odpowiedź na SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
in LINQ to SQL jest
Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
Jednak ta odpowiedź faktycznie pobiera każdego Min
i Max
(a jeśli to inne kruszywa funkcje jak Count
i Average
) w oddzielnych zapytań SQL . Można to łatwo zauważyć w LINQPad.
Czy transakcja (lub coś innego powodującego, że zapytania te są niepodzielne) nie jest pokazywana przez LINQPad, czy jest to stan wyścigu, który czeka na realizację? (A więc trzeba robić triki pokazane w odpowiedzi na powyższe pytanie zmusić pojedynczą kwerendę, która zwraca wiele agregatów.)
Podsumowując, jest tam zapytań LINQ-SQL przy użyciu Aggregate
że zwraca wiele kruszywo działa w jednym (lub przynajmniej "atomowym") zapytaniu?
(ja również powiedzieć „oczywiste”, ponieważ oczywista odpowiedź do mnie, Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin)
, faktycznie pobiera całą tabelę dwukrotnie, nawet jeśli zoptymalizowany, a następnie używa Linq-Podmiotów Min
i Max
aby uzyskać wynik: -()
Myślałem Aggregate
nie była VB-specyficzny, ale wygląda na to, C# nie ma tego wyrażenia kwerendy, więc zmieniliśmy .net do vb.net
Możesz być w stanie sprawdzić, czy zapytania są w transakcji, śledząc samego serwera SQL, powinien go pokazać (ale nie jestem w 100% pewny). Jeśli wydajność nie jest głównym problemem, lepiej jest przeczytać cały zestaw danych i następnie dokonać agregacji (zasadniczo, pracując nad migawką danych). – Alex
Zauważ, że to właśnie miałem nadzieję, że moje oryginalne zapytanie 'Into Min (p.ZoneMin)' zoptymalizuje się do, ponieważ część zapytania SQL jest teraz taka sama. Być może JITter może nadal to widzieć, ale LINQPad's/o + nie. –
A podczas agregowania tylko z funkcjami obsługiwanymi przez SQL, lepiej będzie "zgrupować według stałej sztuczki", aby uzyskać bazę danych do agregacji. –