Bagikan melalui


Klausul Agregat (Visual Basic)

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