Összesítő záradék (Visual Basic)
Egy vagy több összesítő függvényt alkalmaz egy gyűjteményre.
Syntax
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Részek
Időszak | Definíció |
---|---|
element |
Szükséges. A gyűjtemény elemein keresztüli iteráláshoz használt változó. |
type |
Opcionális. A típus.element Ha nincs megadva típus, a függvény a következőből element collection következtet: . |
collection |
Szükséges. A működtetni kívánt gyűjteményre hivatkozik. |
clause |
Opcionális. Egy vagy több lekérdezési záradék( például egy Where záradék) a lekérdezés eredményének finomításához az összesítő záradék vagy záradékok alkalmazásához. |
expressionList |
Szükséges. Egy vagy több vesszőből tagolt kifejezés, amely azonosítja a gyűjteményre alkalmazandó összesítő függvényt. Aliast alkalmazhat egy összesítő függvényre a lekérdezés eredményéhez tartozó tagnév megadásához. Ha nem ad meg aliast, a rendszer az összesítő függvény nevét használja. Példákért tekintse meg a témakör későbbi, összesítő függvényekkel foglalkozó szakaszát. |
Megjegyzések
A Aggregate
záradék használható összesítő függvények lekérdezésekbe való belefoglalására. Az aggregátumfüggvények ellenőrzéseket és számításokat végeznek egy értékhalmazon, és egyetlen értéket adnak vissza. A kiszámított értékhez a lekérdezés eredménytípusának egy tagját használva érheti el. A szabványos összesítő függvények All
a , , Any
, Average
, LongCount
Count
, , Max
Min
, és Sum
függvények. Ezek a függvények olyan fejlesztők számára ismerősek, akik ismerik az SQL összesítéseit. Ezeket a témakör következő szakaszában ismertetjük.
Az aggregátumfüggvény eredménye a lekérdezés eredménytípusának mezőjeként szerepel a lekérdezés eredményében. Az aggregátumfüggvény eredményéhez megadhat aliast annak a lekérdezési eredménytípusnak a nevének megadásához, amely az összesített értéket fogja tárolni. Ha nem ad meg aliast, a rendszer az összesítő függvény nevét használja.
A Aggregate
záradék elindíthat egy lekérdezést, vagy további záradékként is szerepelhet egy lekérdezésben. Ha a Aggregate
záradék lekérdezést kezd, az eredmény egyetlen érték, amely a záradékban Into
megadott összesítő függvény eredménye. Ha a Into
záradékban egynél több összesítő függvény van megadva, a lekérdezés egyetlen típust ad vissza külön tulajdonsággal, hogy hivatkozzon a Into
záradék egyes összesítő függvényeinek eredményére. Ha a Aggregate
záradék további záradékként szerepel egy lekérdezésben, a lekérdezésgyűjteményben visszaadott típusnak külön tulajdonsága lesz, amely a záradék összesítő függvényeinek Into
eredményére hivatkozik.
Aggregátumfüggvények
A záradékkal használható standard összesítő függvények a Aggregate
következők.
Mind
Visszaadja true
, ha a gyűjtemény összes eleme megfelel egy megadott feltételnek, ellenkező esetben ad vissza false
. Például:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Bármely
Visszaadja true
, ha a gyűjtemény bármely eleme megfelel egy megadott feltételnek, ellenkező esetben ad vissza false
. Például:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Átlag
Kiszámítja a gyűjtemény összes elemének átlagát, vagy kiszámít egy megadott kifejezést a gyűjtemény összes eleméhez. Például:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Count
Megszámolja a gyűjtemény elemeinek számát. Megadhat egy opcionális Boolean
kifejezést, amely csak a gyűjtemény azon elemeinek számát számolja meg, amelyek megfelelnek egy feltételnek. Például:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Csoport
Olyan lekérdezési eredményekre hivatkozik, amelyek egy Group By
vagy Group Join
több záradék eredményeként vannak csoportosítva. A Group
függvény csak egy Into
vagy Group Join
több Group By
záradék záradékában érvényes. További információkért és példákért lásd : Group By Clause and Group Join Clause.
LongCount
Megszámolja a gyűjtemény elemeinek számát. Megadhat egy opcionális Boolean
kifejezést, amely csak a gyűjtemény azon elemeinek számát számolja meg, amelyek megfelelnek egy feltételnek. Az eredményt Long
ad vissza . Például tekintse meg az Count
összesítő függvényt.
Max
Kiszámítja a gyűjtemény maximális értékét, vagy kiszámít egy megadott kifejezést a gyűjtemény összes eleméhez. Például:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Min
Kiszámítja a gyűjtemény minimális értékét, vagy kiszámít egy megadott kifejezést a gyűjtemény összes eleméhez. Például:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Sum
Kiszámítja a gyűjtemény összes elemének összegét, vagy kiszámít egy megadott kifejezést a gyűjtemény összes eleméhez. Például:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Példa
Az alábbi példa bemutatja, hogyan alkalmazhat összesítő függvényeket a lekérdezés eredményére a Aggregate
záradék használatával.
Public Sub AggregateSample()
Dim customers = GetCustomerList()
Dim customerOrderTotal =
From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total), MaxOrder = Max(order.Total),
MinOrder = Min(order.Total), Avg = Average(order.Total)
For Each customer In customerOrderTotal
Console.WriteLine(customer.cust.CompanyName & vbCrLf &
vbTab & "Sum = " & customer.Sum & vbCrLf &
vbTab & "Min = " & customer.MinOrder & vbCrLf &
vbTab & "Max = " & customer.MaxOrder & vbCrLf &
vbTab & "Avg = " & customer.Avg.ToString("#.##"))
Next
End Sub
Felhasználó által definiált összesítő függvények létrehozása
A lekérdezési kifejezésekben saját egyéni összesítő függvényeket is felvehet, ha bővítménymetelyeket ad hozzá a IEnumerable<T> típushoz. Az egyéni metódus ezután elvégezhet egy számítást vagy műveletet az összesítő függvényre hivatkozó számba vett gyűjteményen. A bővítménymetelyekről további információt a Bővítménymetelyek című témakörben talál.
Az alábbi példa például egy egyéni aggregátumfüggvényt mutat be, amely kiszámítja egy számgyűjtemény mediánértékét. A bővítménymetódusnak két túlterhelése Median
van. Az első túlterhelés bemenetként egy típusgyűjteményt IEnumerable(Of Double)
fogad el. Ha az Median
aggregátumfüggvény egy típusú Double
lekérdezésmezőhöz van meghívva, ez a metódus lesz meghívva. A metódus második túlterhelése Median
bármilyen általános típusnak átadható. A metódus általános túlterhelése Median
egy második paramétert vesz igénybe, amely a Func(Of T, Double)
lambda kifejezésre hivatkozva egy típus értékét (gyűjteményből) veti ki a megfelelő típusként Double
. Ezután delegálja a mediánérték számítását a metódus másik túlterhelésére Median
. További információ a lambdakifejezésekről: Lambda Expressions.
Imports System.Runtime.CompilerServices
Module UserDefinedAggregates
' Calculate the median value for a collection of type Double.
<Extension()>
Function Median(ByVal values As IEnumerable(Of Double)) As Double
If values.Count = 0 Then
Throw New InvalidOperationException("Cannot compute median for an empty set.")
End If
Dim sortedList = From number In values
Order By number
Dim medianValue As Double
Dim itemIndex = CInt(Int(sortedList.Count / 2))
If sortedList.Count Mod 2 = 0 Then
' Even number of items in list.
medianValue = ((sortedList(itemIndex) + sortedList(itemIndex - 1)) / 2)
Else
' Odd number of items in list.
medianValue = sortedList(itemIndex)
End If
Return medianValue
End Function
' "Cast" the collection of generic items as type Double and call the
' Median() method to calculate the median value.
<Extension()>
Function Median(Of T)(ByVal values As IEnumerable(Of T),
ByVal selector As Func(Of T, Double)) As Double
Return (From element In values Select selector(element)).Median()
End Function
End Module
Az alábbi példa egy típusgyűjtemény összesítő függvényét Integer
meghívó Median
minta lekérdezéseket és egy típusgyűjteményt Double
mutat be. A típusgyűjtemény Double
összesítő függvényét meghívó Median
lekérdezés meghívja annak a metódusnak a Median
túlterhelését, amely bemenetként egy típusgyűjteményt Double
fogad el. A típusgyűjtemény Integer
összesítő függvényét meghívó Median
lekérdezés a metódus általános túlterhelését Median
hívja meg.
Module Module1
Sub Main()
Dim numbers1 = {1, 2, 3, 4, 5}
Dim query1 = Aggregate num In numbers1 Into Median(num)
Console.WriteLine("Median = " & query1)
Dim numbers2 = {1.9, 2, 8, 4, 5.7, 6, 7.2, 0}
Dim query2 = Aggregate num In numbers2 Into Median()
Console.WriteLine("Median = " & query2)
End Sub
End Module
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: