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