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
, Min
ve Sum
işlevleridirAll
. Count
Average
Any
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 Long
dö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 Double
bir 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 Double
baş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 Integer
bir 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 Median
Double
ç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