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.
GroupBy işleci, bir dizinin öğelerini gruplandırir. Aşağıdaki örneklerde Northwind veritabanı kullanılır.
Uyarı
Sorgulardaki GroupBy null sütun değerleri bazen bir InvalidOperationExceptionoluşturabilir. Daha fazla bilgi için Sorun Giderme'nin "GroupBy InvalidOperationException" bölümüne bakın.
Örnek 1
Aşağıdaki örnek Products'yı CategoryID ile bölümlendirir.
IQueryable<IGrouping<Int32?, Product>> prodQuery =
from prod in db.Products
group prod by prod.CategoryID into grouping
select grouping;
foreach (IGrouping<Int32?, Product> grp in prodQuery)
{
Console.WriteLine($"\nCategoryID Key = {grp.Key}:");
foreach (Product listing in grp)
{
Console.WriteLine($"\t{listing.ProductName}");
}
}
Dim prodQuery = From prod In db.Products _
Group prod By prod.CategoryID Into grouping = Group
For Each grp In prodQuery
Console.WriteLine(vbNewLine & "CategoryID Key = {0}:", _
grp.CategoryID)
For Each listing In grp.grouping
Console.WriteLine(vbTab & listing.ProductName)
Next
Next
Örnek 2
Aşağıdaki örnek, Max kullanarak her CategoryID için en yüksek birim fiyatını bulur.
var q =
from p in db.Products
group p by p.CategoryID into g
select new
{
g.Key,
MaxPrice = g.Max(p => p.UnitPrice)
};
Dim query = From p In db.Products _
Group p By p.CategoryID Into g = Group _
Select CategoryID, MaxPrice = g.Max(Function(p) p.UnitPrice)
Örnek 3
Aşağıdaki örnek, her UnitPrice için CategoryID ortalamasını bulmak amacıyla Ortalama kullanır.
var q2 =
from p in db.Products
group p by p.CategoryID into g
select new
{
g.Key,
AveragePrice = g.Average(p => p.UnitPrice)
};
Dim q2 = From p In db.Products _
Group p By p.CategoryID Into g = Group _
Select CategoryID, AveragePrice = g.Average(Function(p) _
p.UnitPrice)
Örnek 4
Örnek Sum, her bir UnitPrice için toplam CategoryID bulmak amacıyla kullanılmaktadır.
var priceQuery =
from prod in db.Products
group prod by prod.CategoryID into grouping
select new
{
grouping.Key,
TotalPrice = grouping.Sum(p => p.UnitPrice)
};
foreach (var grp in priceQuery)
{
Console.WriteLine("Category = {0}, Total price = {1}",
grp.Key, grp.TotalPrice);
}
Dim priceQuery = From prod In db.Products _
Group prod By prod.CategoryID Into grouping = Group _
Select CategoryID, TotalPrice = grouping.Sum(Function(p) _
p.UnitPrice)
For Each grp In priceQuery
Console.WriteLine("Category = {0}, Total price = {1}", _
grp.CategoryID, grp.TotalPrice)
Next
Örnek 5
Aşağıdaki örnek, her Count'de sonlandırılmış Products sayısını bulmak için CategoryID kullanır.
var disconQuery =
from prod in db.Products
group prod by prod.CategoryID into grouping
select new
{
grouping.Key,
NumProducts = grouping.Count(p => p.Discontinued)
};
foreach (var prodObj in disconQuery)
{
Console.WriteLine("CategoryID = {0}, Discontinued# = {1}",
prodObj.Key, prodObj.NumProducts);
}
Dim disconQuery = From prod In db.Products _
Group prod By prod.CategoryID Into grouping = Group _
Select CategoryID, NumProducts = grouping.Count(Function(p) _
p.Discontinued)
For Each prodObj In disconQuery
Console.WriteLine("CategoryID = {0}, Discontinued# = {1}", _
prodObj.CategoryID, prodObj.NumProducts)
Next
Örnek 6
Aşağıdaki örnek, en az 10 ürün içeren tüm kategorileri bulmak için aşağıdaki where yan tümceyi kullanır.
var prodCountQuery =
from prod in db.Products
group prod by prod.CategoryID into grouping
where grouping.Count() >= 10
select new
{
grouping.Key,
ProductCount = grouping.Count()
};
foreach (var prodCount in prodCountQuery)
{
Console.WriteLine("CategoryID = {0}, Product count = {1}",
prodCount.Key, prodCount.ProductCount);
}
Dim prodCountQuery = From prod In db.Products _
Group prod By prod.CategoryID Into grouping = Group _
Where grouping.Count >= 10 _
Select CategoryID, ProductCount = grouping.Count
For Each prodCount In prodCountQuery
Console.WriteLine("CategoryID = {0}, Product count = {1}", _
prodCount.CategoryID, prodCount.ProductCount)
Next
Örnek 7
Aşağıdaki örnek, ürünleri CategoryID ve SupplierID ölçütlerine göre gruplandırır.
var prodQuery =
from prod in db.Products
group prod by new
{
prod.CategoryID,
prod.SupplierID
}
into grouping
select new { grouping.Key, grouping };
foreach (var grp in prodQuery)
{
Console.WriteLine("\nCategoryID {0}, SupplierID {1}",
grp.Key.CategoryID, grp.Key.SupplierID);
foreach (var listing in grp.grouping)
{
Console.WriteLine($"\t{listing.ProductName}");
}
}
Dim prodQuery = From prod In db.Products _
Group prod By Key = New With {prod.CategoryID, prod.SupplierID} _
Into grouping = Group
For Each grp In prodQuery
Console.WriteLine(vbNewLine & "CategoryID {0}, SupplierID {1}", _
grp.Key.CategoryID, grp.Key.SupplierID)
For Each listing In grp.grouping
Console.WriteLine(vbTab & listing.ProductName)
Next
Next
Örnek 8
Aşağıdaki örnek, iki ürün dizisi döndürür. İlk sıra, birim fiyatı 10'dan küçük veya buna eşit olan ürünleri içerir. İkinci sıra, birim fiyatı 10'dan büyük olan ürünleri içerir.
var priceQuery =
from prod in db.Products
group prod by new
{
Criterion = prod.UnitPrice > 10
}
into grouping
select grouping;
foreach (var prodObj in priceQuery)
{
if (prodObj.Key.Criterion == false)
Console.WriteLine("Prices 10 or less:");
else
Console.WriteLine("\nPrices greater than 10");
foreach (var listing in prodObj)
{
Console.WriteLine("{0}, {1}", listing.ProductName,
listing.UnitPrice);
}
}
Dim priceQuery = From prod In db.Products _
Group prod By Key = New With {.Criterion = prod.UnitPrice > 10} _
Into grouping = Group Select Key, grouping
For Each prodObj In priceQuery
If prodObj.Key.Criterion = False Then
Console.WriteLine("Prices 10 or less:")
Else
Console.WriteLine("\nPrices greater than 10")
For Each listing In prodObj.grouping
Console.WriteLine("{0}, {1}", listing.ProductName, _
listing.UnitPrice)
Next
End If
Next
Örnek
işleci GroupBy yalnızca tek bir anahtar bağımsız değişkeni alabilir. Birden fazla anahtara göre gruplandırmanız gerekiyorsa, aşağıdaki örnekte olduğu gibi anonim bir tür oluşturmanız gerekir:
var custRegionQuery =
from cust in db.Customers
group cust.ContactName by new { City = cust.City, Region = cust.Region };
foreach (var grp in custRegionQuery)
{
Console.WriteLine($"\nLocation Key: {grp.Key}");
foreach (var listing in grp)
{
Console.WriteLine($"\t{listing}");
}
}
Dim custRegionQuery = From cust In db.Customers _
Group cust.ContactName By Key = New With _
{cust.City, cust.Region} Into grouping = Group
For Each grp In custRegionQuery
Console.WriteLine(vbNewLine & "Location Key: {0}", grp.Key)
For Each listing In grp.grouping
Console.WriteLine(vbTab & "{0}", listing)
Next
Next