Aggregate Tümcesi (Visual Basic)

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

Syntax

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

Bölümler

Süre Tanım
element Gereklidir. Koleksiyon öğeleri boyunca yinelemek için kullanılan değişken.
type İsteğe bağlı. Türü element . Hiçbir tür belirtilmemişse, türü element öğesinden çıkarsanamıyor collection .
collection Gereklidir. Üzerinde çalışılacak koleksiyona başvurur.
clause İsteğe bağlı. WhereToplama yan tümcesini veya yan tümceleri uygulamak üzere sorgu sonucunu daraltmak için bir yan tümce gibi bir veya daha fazla sorgu yan tümcesi.
expressionList Gereklidir. Koleksiyona uygulanacak bir toplama işlevini tanımlayan bir veya daha fazla virgülle ayrılmış ifade. Sorgu sonucu için bir üye adı belirtmek üzere bir toplama işlevine bir diğer ad uygulayabilirsiniz. Diğer ad sağlanmazsa, toplama işlevinin adı kullanılır. Örnekler için, bu konunun ilerleyen kısımlarında bulunan toplama işlevleri hakkında bölümüne bakın.

Açıklamalar

AggregateYan tümce, Sorgularınızdaki toplama işlevlerini dahil etmek için kullanılabilir. Toplama işlevleri, bir değerler kümesi üzerinde denetim 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,,,,,, All Any Average Count LongCount Max Min , ve Sum işlevleridir. Bu işlevler, SQL toplamalar hakkında tanıdık olan geliştiricilere tanıdık gelecektir. Bunlar, bu konunun aşağıdaki bölümünde açıklanmaktadır.

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

AggregateYan tümce bir sorgu başlatabilir veya bir sorguya ek bir yan tümce olarak eklenebilir. AggregateYan tümce bir sorgu başlıyorsa, sonuç, yan tümcesinde belirtilen toplama işlevinin sonucu olan tek bir değerdir Into . Yan tümcesinde birden fazla toplama işlevi belirtilmişse Into , sorgu, yan tümcesindeki her toplama işlevinin sonucuna başvurmak için ayrı bir özelliği olan tek bir tür döndürür Into . AggregateYan tümce bir sorguya ek bir yan tümce olarak dahil edildiğinde, sorgu koleksiyonunda döndürülen tür, yan tümcesindeki her toplama işlevinin sonucuna başvuracak ayrı bir özelliğe sahip olur Into .

Toplama İşlevleri

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

Tümü

trueKoleksiyondaki tüm öğelerin belirtilen koşulu karşılayıp karşılamadığını döndürür; 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)

Herhangi biri

trueKoleksiyondaki herhangi bir öğenin belirtilen koşulu karşılayıp karşılamadığını döndürür; 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)

Count

Koleksiyondaki öğelerin sayısını sayar. BooleanKoleksiyonda yalnızca bir koşulu karşılayan öğelerin sayısını saymak için isteğe bağlı 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#)

Grup

, Group By Veya yan tümcesinin sonucu olarak gruplandırılan sorgu sonuçlarının başvurduğu anlamına gelir Group Join . Groupİşlev yalnızca Into Group By OR yan tümcesinde geçerlidir Group Join . Daha fazla bilgi ve örnek için bkz. Group by yan tümcesi ve Group JOIN yan tümcesi.

LongCount

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

En yüksek değer

Koleksiyondaki maksimum 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 küçü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 örnek, Aggregate bir sorgu sonucuna toplama işlevleri uygulamak için yan tümcesinin nasıl kullanılacağını gösterir.

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

User-Defined toplama Işlevleri oluşturma

Türe uzantı yöntemleri ekleyerek kendi özel toplama işlevlerinizi bir sorgu ifadesine dahil edebilirsiniz IEnumerable<T> . Özel yönteminiz, toplama işlevinizin başvurduğu sıralanabilir 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 örnek bir sayı koleksiyonunun ortanca değerini hesaplayan özel bir toplama işlevi gösterir. Uzantı yönteminin iki aşırı yüklemesi vardır Median . İlk aşırı yükleme giriş olarak bir tür koleksiyonu kabul eder IEnumerable(Of Double) . MedianToplama işlevi, türünde bir sorgu alanı için çağrılırsa Double , bu yöntem çağrılır. Metodun ikinci aşırı yüklemesi Median herhangi bir genel tür geçirilebilir. Yönteminin genel aşırı yüklemesi, Median Func(Of T, Double) bir tür için değeri (bir koleksiyondan), karşılık gelen türü olarak proje için lambda ifadesine başvuran ikinci bir parametre alır Double . Daha sonra ortanca değer hesaplamasını metodun diğer aşırı yüküne devreder Median . Lambda ifadeleri hakkında daha fazla bilgi için bkz. lambda ifadeleri.

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 örnek Median , bir türü koleksiyonda toplama işlevini çağıran örnek sorguları Integer ve türünde bir koleksiyonu gösterir Double . MedianTürü koleksiyonundaki toplama işlevini çağıran sorgu, Double Median türü bir koleksiyon olarak kabul eden metodun aşırı yüklemesini çağırır Double . MedianTürü koleksiyonundaki toplama işlevini çağıran sorgu, Integer yönteminin genel aşırı yüklemesini çağırır 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

Ayrıca bkz.