Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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çalar
| Süre | Tanım |
|---|---|
element |
Gerekli. Koleksiyonun öğeleri arasında yinelemek için kullanılan değişken. |
type |
Opsiyonel. 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 |
Opsiyonel. 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ü
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)
Herhangi biri
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#)
Grup
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)
Dakika
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)
Toplam
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
User-Defined 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 bakınız
- Visual Basic'da LINQ'e
Giriş - Arama Sorguları
- Seçim Deyimi
- From İfadesi
- Where Yan Tümcesi
- Group By Yan Tümcesi