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ı newGroupbir devamlılık kullanarak ve ardından üzerinde newGroupyeni 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}");
}

Ayrıca bkz.