Aggregate Tümcesi (Visual Basic)

Bir koleksiyona bir veya daha fazla toplama işlevi uygular.

Sözdizimi

Aggregate element [As type] In collection _  
  [, element2 [As type2] In collection2, [...]]  
  [ clause ]  
  Into expressionList  

Parça

Süre Tanım
element Gerekli. Koleksiyonun öğeleri arasında yinelemek için kullanılan değişken.
type isteğe bağlı. türü.element Hiçbir tür belirtilmezse türü element dosyasından collectionçıkarılır.
collection Gerekli. Üzerinde çalışacak koleksiyonu ifade eder.
clause isteğe bağlı. Toplama yan tümcesini veya yan tümcelerini uygulamak üzere sorgu sonucunu daraltmak için yan tümce gibi bir Where veya daha fazla sorgu yan tümcesi.
expressionList Gerekli. Koleksiyona uygulanacak bir toplama işlevini tanımlayan bir veya daha fazla virgülle ayrılmış ifade. Sorgu sonucu için üye adı belirtmek üzere bir toplama işlevine diğer ad uygulayabilirsiniz. Diğer ad sağlanmazsa, toplama işlevinin adı kullanılır. Örnekler için bu konunun devamında yer alan toplama işlevleriyle ilgili bölüme bakın.

Açıklamalar

yan tümcesi Aggregate , sorgularınıza toplama işlevleri eklemek için kullanılabilir. Toplama işlevleri, bir değer kümesi üzerinde denetimler ve hesaplamalar gerçekleştirir ve tek bir değer döndürür. Sorgu sonuç türünün bir üyesini kullanarak hesaplanan değere erişebilirsiniz. Kullanabileceğiniz standart toplama işlevleri , , , , , , LongCount, Max, Minve Sum işlevleridirAll. CountAverageAny Bu işlevler, SQL'deki toplamaları bilen geliştiricilere aşinadır. Bunlar, bu konunun aşağıdaki bölümünde açıklanmıştır.

Toplama işlevinin sonucu sorgu sonucuna sorgu sonuç türünün bir alanı olarak eklenir. Toplama değerini tutacak sorgu sonuç türünün üyesinin adını belirtmek için toplama işlevi sonucu için bir diğer ad sağlayabilirsiniz. Diğer ad sağlanmazsa, toplama işlevinin adı kullanılır.

Aggregate yan tümcesi bir sorgu başlatabilir veya sorguya ek bir yan tümce olarak eklenebilir. Aggregate Yan tümcesi bir sorgu başlatırsa, sonuç yan tümcesinde Into belirtilen toplama işlevinin sonucu olan tek bir değerdir. Yan tümcesinde birden fazla toplama işlevi belirtilirse, sorgu yan tümcesindeki Into her toplama işlevinin Into sonucuna başvurmak için ayrı bir özelliğe sahip tek bir tür döndürür. Aggregate Yan tümcesi sorguya ek bir yan tümce olarak dahil edilirse, sorgu koleksiyonunda döndürülen tür yan tümcesindeki Into her toplama işlevinin sonucuna başvurmak için ayrı bir özelliğe sahip olur.

Toplama İşlevleri

Aşağıdakiler yan tümcesiyle Aggregate kullanılabilen standart toplama işlevleridir.

Tümünü

Koleksiyondaki tüm öğeler belirtilen koşulu karşılarsa döndürür true ; aksi takdirde döndürür false. Aşağıda bir örnek verilmiştir:

Dim customerList1 = Aggregate order In orders
                    Into AllOrdersOver100 = All(order.Total >= 100)

Tümü

Koleksiyondaki herhangi bir öğe belirtilen koşulu karşılarsa döndürür true ; aksi takdirde döndürür false. Aşağıda bir örnek verilmiştir:

Dim customerList2 = From cust In customers
                    Aggregate order In cust.Orders
                    Into AnyOrderOver500 = Any(order.Total >= 500)

Ortalama

Koleksiyondaki tüm öğelerin ortalamasını hesaplar veya koleksiyondaki tüm öğeler için sağlanan bir ifadeyi hesaplar. Aşağıda bir örnek verilmiştir:

Dim customerOrderAverage = Aggregate order In orders
                           Into Average(order.Total)

Sayı

Koleksiyondaki öğe sayısını sayar. Koleksiyondaki yalnızca bir koşulu karşılayan öğe sayısını saymak için isteğe bağlı Boolean bir ifade sağlayabilirsiniz. Aşağıda bir örnek verilmiştir:

Dim customerOrderAfter1996 = From cust In customers
                             Aggregate order In cust.Orders
                             Into Count(order.OrderDate > #12/31/1996#)

Gruplandırma

Bir veya Group Join yan tümcesinin Group By sonucu olarak gruplandırılan sorgu sonuçlarını ifade eder. Group işlevi yalnızca bir Group By veya Group Join yan tümcesinin yan tümcesinde Into geçerlidir. Daha fazla bilgi ve örnek için bkz . Group By Yan Tümcesi ve Grup Birleştirme Yan Tümcesi.

Longcount

Koleksiyondaki öğe sayısını sayar. Koleksiyondaki yalnızca bir koşulu karşılayan öğe sayısını saymak için isteğe bağlı Boolean bir ifade sağlayabilirsiniz. Sonucu olarak Longdöndürür. Bir örnek için bkz Count . toplama işlevi.

Maks

Koleksiyondaki en büyük değeri hesaplar veya koleksiyondaki tüm öğeler için sağlanan bir ifadeyi hesaplar. Aşağıda bir örnek verilmiştir:

Dim customerMaxOrder = Aggregate order In orders
                       Into MaxOrder = Max(order.Total)

Min

Koleksiyondaki en düşük değeri hesaplar veya koleksiyondaki tüm öğeler için sağlanan bir ifadeyi hesaplar. Aşağıda bir örnek verilmiştir:

Dim customerMinOrder = From cust In customers
                       Aggregate order In cust.Orders
                       Into MinOrder = Min(order.Total)

Sum

Koleksiyondaki tüm öğelerin toplamını hesaplar veya koleksiyondaki tüm öğeler için sağlanan bir ifadeyi hesaplar. Aşağıda bir örnek verilmiştir:

Dim customerTotals = From cust In customers
                     Aggregate order In cust.Orders
                     Into Sum(order.Total)

Örnek

Aşağıdaki örnekte, sorgu sonucuna toplama işlevleri uygulamak için yan tümcesinin Aggregate nasıl kullanılacağı gösterilmektedir.

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

Kullanıcı Tanımlı Toplama İşlevleri Oluşturma

Türüne uzantı yöntemleri ekleyerek bir sorgu ifadesine IEnumerable<T> kendi özel toplama işlevlerinizi ekleyebilirsiniz. Özel yönteminiz daha sonra toplama işlevinize başvuran numaralandırılabilir koleksiyonda bir hesaplama veya işlem gerçekleştirebilir. Uzantı yöntemleri hakkında daha fazla bilgi için bkz . Uzantı Yöntemleri.

Örneğin, aşağıdaki örnekte bir sayı koleksiyonunun ortanca değerini hesaplayan özel bir toplama işlevi gösterilmektedir. Uzantı yönteminin Median iki aşırı yüklemesi vardır. İlk aşırı yükleme giriş olarak türünde IEnumerable(Of Double)bir koleksiyon kabul eder. Median toplama işlevi türünde Doublebir sorgu alanı için çağrılırsa, bu yöntem çağrılır. Yöntemin Median ikinci aşırı yüklemesi herhangi bir genel türe geçirilebilir. yönteminin Median genel aşırı yüklemesi, türüne karşılık gelen değer olarak (koleksiyondan) bir değer yansıtmak için lambda ifadesine Doublebaşvuran Func(Of T, Double) ikinci bir parametre alır. Ardından ortanca değerin hesaplamasını yöntemin diğer aşırı yüklemesine devreder Median . Lambda ifadeleri hakkında daha fazla bilgi için bkz . Lambda İfadeleri.

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

Aşağıdaki örnekte, türünde bir koleksiyon ve türünde Integerbir koleksiyon üzerinde toplama işlevini çağıran Median örnek sorgular gösterilmektedirDouble. türündeki Double toplama işlevini çağıran Median sorgu, giriş olarak türünde bir koleksiyon kabul eden yöntemin aşırı yüklemesini MedianDoubleçağırır. Tür Integer koleksiyonunda Median toplama işlevini çağıran sorgu, yönteminin genel aşırı yüklemesini Median çağırır.

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

Ayrıca bkz.