Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menerapkan satu atau beberapa fungsi agregat ke koleksi.
Sintaksis
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Bagian
| Istilah | Definisi |
|---|---|
element |
Dibutuhkan. Variabel yang digunakan untuk melakukan iterasi melalui elemen koleksi. |
type |
Fakultatif. Jenis element. Jika tidak ada jenis yang ditentukan, jenis element disimpulkan dari collection. |
collection |
Dibutuhkan. Mengacu pada koleksi yang akan dioperasikan. |
clause |
Fakultatif. Satu atau beberapa klausa kueri, seperti Where klausa, untuk menyempurnakan hasil kueri untuk menerapkan klausa atau klausa agregat. |
expressionList |
Dibutuhkan. 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 digunakan. Misalnya, lihat bagian tentang fungsi agregat nanti dalam topik ini. |
Komentar
Klausa Aggregate dapat digunakan untuk menyertakan fungsi agregat dalam kueri Anda. Fungsi agregat melakukan pemeriksaan dan komputasi atas sekumpulan nilai dan mengembalikan satu nilai. Anda dapat mengakses nilai komputasi dengan menggunakan anggota tipe hasil kueri. Fungsi agregat standar yang dapat Anda gunakan adalah Allfungsi , , Any, AverageCount, LongCountMax, Min, , dan Sum . Fungsi-fungsi ini akrab untuk pengembang yang terbiasa dengan agregat di SQL. Mereka dijelaskan di bagian berikut dari topik ini.
Hasil fungsi agregat disertakan dalam hasil kueri sebagai bidang tipe hasil kueri. Anda dapat menyediakan alias untuk hasil fungsi agregat untuk menentukan nama anggota tipe hasil kueri yang akan menyimpan nilai agregat. Jika tidak ada alias yang disediakan, nama fungsi agregat digunakan.
Klausa Aggregate dapat memulai kueri, atau dapat disertakan sebagai klausa tambahan dalam kueri.
Aggregate Jika klausa memulai kueri, hasilnya adalah nilai tunggal yang merupakan hasil dari fungsi agregat yang ditentukan dalam Into klausa. Jika lebih dari satu fungsi agregat ditentukan dalam Into klausa, kueri mengembalikan satu jenis dengan properti terpisah untuk mereferensikan hasil setiap fungsi agregat dalam Into klausa.
Aggregate Jika klausa disertakan sebagai klausul tambahan dalam kueri, jenis yang dikembalikan dalam koleksi kueri akan memiliki properti terpisah untuk mereferensikan hasil setiap fungsi agregat dalam Into klausa.
Fungsi Agregat
Berikut ini adalah fungsi agregat standar yang dapat digunakan dengan Aggregate klausa.
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)
Apa saja
Mengembalikan true jika ada elemen dalam koleksi yang memenuhi kondisi tertentu; 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)
Tengah
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)
Jumlah
Menghitung jumlah elemen dalam koleksi. Anda dapat memberikan ekspresi opsional Boolean 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#)
Kelompok
Mengacu pada hasil kueri yang dikelompokkan sebagai hasil dari Group By klausa atau Group Join . Fungsi Group ini hanya valid dalam Into klausa klausul Group By atau Group Join . Untuk informasi dan contoh selengkapnya, lihat Klausa Kelompokkan Menurut dan KlausulGabungan Grup.
LongCount
Menghitung jumlah elemen dalam koleksi. Anda dapat memberikan ekspresi opsional Boolean untuk menghitung hanya jumlah elemen dalam koleksi yang memenuhi kondisi. Mengembalikan hasil sebagai Long. Misalnya, lihat Count fungsi agregat.
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)
Menit
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 Aggregate klausul 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 User-Defined
Anda dapat menyertakan fungsi agregat kustom Anda sendiri dalam ekspresi kueri dengan menambahkan metode ekstensi ke jenis tersebut 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 beban Median metode ekstensi. Kelebihan beban pertama menerima, sebagai input, kumpulan jenis IEnumerable(Of Double).
Median Jika fungsi agregat dipanggil untuk bidang kueri jenis Double, metode ini akan dipanggil. Kelebihan metode Median kedua dapat diteruskan jenis generik apa pun. Kelebihan generik Median metode mengambil parameter kedua yang mereferensikan Func(Of T, Double) ekspresi lambda untuk memproyeksikan nilai untuk jenis (dari koleksi) sebagai nilai jenis Doubleyang sesuai. Kemudian mendelegasikan perhitungan nilai median ke kelebihan beban Median metode 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 kueri sampel yang memanggil Median fungsi agregat pada kumpulan jenis Integer, dan kumpulan jenis Double. Kueri yang memanggil Median fungsi agregat pada kumpulan jenis Double memanggil kelebihan beban Median metode yang menerima, sebagai input, kumpulan jenis Double. Kueri yang memanggil Median fungsi agregat pada kumpulan jenis Integer memanggil kelebihan generik Median metode.
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
Lihat juga
- Pengenalan LINQ di Visual Basic
- Pertanyaan
- Pilih Klausa
- Klausa From
- Klausa Where
- Klausul Kelompokkan Menurut