Klausul Agregat (Visual Basic)
Menerapkan satu atau beberapa fungsi agregat ke koleksi.
Sintaks
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Generator
Term | Definisi |
---|---|
element |
Harus diisi. Variabel yang digunakan untuk iterasi melalui elemen koleksi. |
type |
Opsional. Jenis element . Jika tidak ada jenis yang ditentukan, jenis element disimpulkan dari collection . |
collection |
Harus diisi. Mengacu pada koleksi untuk beroperasi. |
clause |
Opsional. Satu atau beberapa klausul kueri, seperti klausul Where , untuk memperbaiki hasil kueri untuk menerapkan klausul atau klausul agregat. |
expressionList |
Harus diisi. Satu atau beberapa ekspresi yang dibatasi koma yang mengidentifikasi fungsi agregat untuk diterapkan ke koleksi. Anda bisa menerapkan alias ke fungsi agregat untuk menentukan nama anggota untuk hasil kueri. Jika tidak ada alias yang disediakan, nama fungsi agregat akan digunakan. Misalnya, lihat bagian tentang fungsi agregat nanti dalam topik ini. |
Keterangan
Klausul Aggregate
dapat digunakan untuk menyertakan fungsi agregat dalam kueri Anda. Fungsi agregat melakukan pemeriksaan dan komputasi atas sekumpulan nilai dan mengembalikan satu nilai. Anda bisa mengakses nilai komputasi dengan menggunakan anggota tipe hasil kueri. Fungsi agregat standar yang dapat Anda gunakan adalah fungsi All
, Any
, Average
, Count
, LongCount
, Max
, Min
dan Sum
. Fungsi-fungsi ini akrab bagi pengembang yang terbiasa dengan agregat dalam SQL. Mereka dijelaskan di bagian berikut dari topik ini.
Hasil fungsi agregat disertakan dalam hasil kueri sebagai bidang jenis hasil kueri. Anda dapat menyediakan alias untuk hasil fungsi agregat untuk menentukan nama anggota jenis hasil kueri yang akan menahan nilai agregat. Jika tidak ada alias yang disediakan, nama fungsi agregat akan digunakan.
Klausul Aggregate
dapat memulai kueri, atau dapat disertakan sebagai klausul tambahan dalam kueri. Jika klausul Aggregate
memulai kueri, hasilnya adalah nilai tunggal yang merupakan hasil dari fungsi agregat yang ditentukan dalam klausul Into
. Jika lebih dari satu fungsi agregat ditentukan dalam klausul Into
, kueri mengembalikan satu jenis dengan properti terpisah untuk mereferensikan hasil setiap fungsi agregat dalam klausul Into
. Jika klausul Aggregate
disertakan sebagai klausa tambahan dalam kueri, jenis yang dikembalikan dalam koleksi kueri akan memiliki properti terpisah untuk mereferensikan hasil setiap fungsi agregat dalam klausul Into
.
Fungsi Agregat
Berikut ini adalah fungsi agregat standar yang dapat digunakan dengan klausul Aggregate
.
Semua
Mengembalikan true
jika semua elemen dalam koleksi memenuhi kondisi yang ditentukan; jika tidak, mengembalikan false
. Berikut ini adalah contohnya:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Mana pun
Mengembalikan true
jika ada elemen dalam koleksi yang memenuhi kondisi yang ditentukan; jika tidak, mengembalikan false
. Berikut ini adalah contohnya:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Rata-rata
Menghitung rata-rata semua elemen dalam koleksi, atau menghitung ekspresi yang disediakan untuk semua elemen dalam koleksi. Berikut ini adalah contohnya:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Hitung
Menghitung jumlah elemen dalam koleksi. Anda dapat memberikan ekspresi Boolean
opsional untuk menghitung hanya jumlah elemen dalam koleksi yang memenuhi kondisi. Berikut ini adalah contohnya:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Grupkan
Mengacu pada hasil kueri yang dikelompokkan sebagai hasil dari klausul Group By
atau Group Join
. Fungsi Group
ini hanya valid dalam klausul Into
dari klausul Group By
atau Group Join
. Untuk informasi dan contoh selengkapnya, lihat Kelompokkan Menurut Klausul dan KlausulGabungan Grup.
LongCount
Menghitung jumlah elemen dalam koleksi. Anda dapat memberikan ekspresi Boolean
opsional untuk menghitung hanya jumlah elemen dalam koleksi yang memenuhi kondisi. Mengembalikan hasil sebagai Long
. Misalnya, lihat fungsi agregat Count
.
Maks
Menghitung nilai maksimum dari koleksi, atau menghitung ekspresi yang disediakan untuk semua elemen dalam koleksi. Berikut ini adalah contohnya:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Min
Menghitung nilai minimum dari koleksi, atau menghitung ekspresi yang disediakan untuk semua elemen dalam koleksi. Berikut ini adalah contohnya:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Jumlah total
Menghitung jumlah semua elemen dalam koleksi, atau menghitung ekspresi yang disediakan untuk semua elemen dalam koleksi. Berikut ini adalah contohnya:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Contoh
Contoh berikut menunjukkan cara menggunakan klausul Aggregate
untuk menerapkan fungsi agregat ke hasil kueri.
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
Membuat Fungsi Agregat yang Ditentukan Pengguna
Anda dapat menyertakan fungsi agregat kustom Anda sendiri dalam ekspresi kueri dengan menambahkan metode ekstensi ke jenis IEnumerable<T>. Metode kustom Anda kemudian dapat melakukan penghitungan atau operasi pada koleksi enumerable yang telah mereferensikan fungsi agregat Anda. Untuk informasi selengkapnya tentang metode ekstensi, lihat Metode Ekstensi.
Misalnya, contoh berikut menunjukkan fungsi agregat kustom yang menghitung nilai median kumpulan angka. Ada dua kelebihan metode ekstensi Median
. Kelebihan beban pertama menerima, sebagai input, kumpulan jenis IEnumerable(Of Double)
. Jika fungsi agregat Median
dipanggil untuk bidang kueri jenis Double
, metode ini akan dipanggil. Kelebihan beban kedua dari metode Median
dapat diteruskan jenis generik apa pun. Kelebihan umum metode Median
mengambil parameter kedua yang mereferensikan ekspresi lambda Func(Of T, Double)
untuk memproyeksikan nilai untuk jenis (dari koleksi) sebagai nilai jenis Double
yang sesuai. Kemudian mendelegasikan perhitungan nilai median ke kelebihan beban metode Median
lainnya. Untuk informasi selengkapnya tentang ekspresi lambda, lihat Ekspresi Lambda.
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
Contoh berikut menunjukkan contoh kueri yang memanggil fungsi agregat Median
pada kumpulan jenis Integer
, dan kumpulan jenis Double
. Kueri yang memanggil fungsi agregat Median
pada kumpulan jenis Double
memanggil kelebihan beban metode Median
yang menerima, sebagai input, kumpulan jenis Double
. Kueri yang memanggil fungsi agregat Median
pada kumpulan jenis Integer
memanggil kelebihan umum metode Median
.
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