Gruplandırma işleminde alt sorgu gerçekleştirme
Bu makalede, kaynak verileri gruplar halinde sıralayan ve ardından her grup üzerinde ayrı ayrı bir alt sorgu gerçekleştiren bir sorgu oluşturmanın iki farklı yolu gösterilmektedir. Her örnekteki temel teknik, adlı newGroup
bir devamlılık kullanarak ve ardından üzerinde newGroup
yeni bir alt sorgu oluşturarak kaynak öğeleri gruplandırmaktır. Bu alt sorgu, dış sorgu tarafından oluşturulan her yeni grupta çalıştırılır. Bu örnekte son çıkışın bir grup değil, anonim türlerden oluşan düz bir dizi olduğunu unutmayın.
Gruplandırma hakkında daha fazla bilgi için bkz. group yan tümcesi.
Devamlılıklar hakkında daha fazla bilgi için bkz. Aşağıdaki örnek, veri kaynağı olarak bellek içi bir veri yapısı kullanır, ancak her tür LINQ veri kaynağı için aynı ilkeler geçerlidir.
Örnek
Not
Bu konudaki örneklerde, Bir nesne koleksiyonunu sorgulama bölümündeki örnek koddaki sınıf ve students
liste kullanılmıştırStudent
.
var queryGroupMax =
from student in students
group student by student.Year into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore = (
from student2 in studentGroup
select student2.ExamScores.Average()
).Max()
};
int count = queryGroupMax.Count();
Console.WriteLine($"Number of groups = {count}");
foreach (var item in queryGroupMax)
{
Console.WriteLine($" {item.Level} Highest Score={item.HighestScore}");
}
Yukarıdaki kod parçacığındaki sorgu, yöntem söz dizimi kullanılarak da yazılabilir. Aşağıdaki kod parçacığında, yöntem söz dizimi kullanılarak yazılmış bir eşanlamlı eşdeğer sorgu vardır.
var queryGroupMax =
students
.GroupBy(student => student.Year)
.Select(studentGroup => new
{
Level = studentGroup.Key,
HighestScore = studentGroup.Select(student2 => student2.ExamScores.Average()).Max()
});
int count = queryGroupMax.Count();
Console.WriteLine($"Number of groups = {count}");
foreach (var item in queryGroupMax)
{
Console.WriteLine($" {item.Level} Highest Score={item.HighestScore}");
}