Aracılığıyla paylaş


Method-Based Sorgu Söz Dizimi Örnekleri: Gruplandırma

Bu konudaki örneklerde, yöntem tabanlı sorgu söz dizimi kullanarak GroupBy sorgulamak için yönteminin nasıl kullanılacağı gösterilmektedir. Bu örneklerde kullanılan AdventureWorks Satış Modeli, AdventureWorks örnek veritabanındaki Contact, Address, Product, SalesOrderHeader ve SalesOrderDetail tablolarından oluşturulur.

Bu konudaki örneklerde aşağıdaki using/Imports deyimleri kullanılır:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using System.Globalization;
using System.Data.EntityClient;
using System.Data.SqlClient;
using System.Data.Common;

Option Explicit On
Option Strict On
Imports System.Data.Objects
Imports System.Globalization

Örnek 1

Aşağıdaki örnek, posta koduna göre gruplandırılmış GroupBy nesneleri döndürmek için Address yöntemini kullanır. Sonuçlar anonim bir türe yansıtılır.

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var query = context.Addresses
        .GroupBy( address => address.PostalCode);

    foreach (IGrouping<string, Address> addressGroup in query)
    {
        Console.WriteLine($"Postal Code: {addressGroup.Key}");
        foreach (Address address in addressGroup)
        {
            Console.WriteLine("\t" + address.AddressLine1 +
                address.AddressLine2);
        }
    }
}
Using context As New AdventureWorksEntities
    Dim query = context.Addresses _
        .GroupBy(Function(Address) Address.PostalCode) _
        .Select(Function(Address) Address)

    For Each addressGroup As IGrouping(Of String, Address) In query
        Console.WriteLine("Postal Code: {0}", addressGroup.Key)
        For Each address As Address In addressGroup

            Console.WriteLine("   " + address.AddressLine1 + address.AddressLine2)
        Next
    Next
End Using

Örnek 2

Aşağıdaki örnekte, kişinin soyadının ilk harfine göre gruplandırılmış GroupBy nesneleri döndürmek için Contact yöntemi kullanılmaktadır. Sonuçlar da soyadının ilk harfine göre sıralanır ve anonim bir türe yansıtılır.

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var query = context.Contacts
        .GroupBy(c => c.LastName.Substring(0,1))
        .OrderBy(c => c.Key);

    foreach (IGrouping<string, Contact> group in query)
    {
        Console.WriteLine($"Last names that start with the letter '{group.Key}':");
        foreach (Contact contact in group)
        {
            Console.WriteLine(contact.LastName);
        }
    }
}
Using context As New AdventureWorksEntities

    Dim query = context.Contacts _
    .GroupBy(Function(c) c.LastName.Substring(0, 1)) _
    .OrderBy(Function(c) c.Key) _
    .Select(Function(c) c)

    For Each group As IGrouping(Of String, Contact) In query
        Console.WriteLine("Last names that start with the letter '{0}':", group.Key)

        For Each contact As Contact In group

            Console.WriteLine(contact.LastName)
        Next
    Next

End Using

Örnek 3

Aşağıdaki örnek, müşteri kimliğine göre gruplandırılmış GroupBy nesneleri döndürmek için SalesOrderHeader yöntemini kullanır. Her müşteri için satış sayısı da döndürülür.

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var query = context.SalesOrderHeaders
        .GroupBy(order => order.CustomerID);

    foreach (IGrouping<int, SalesOrderHeader> group in query)
    {
        Console.WriteLine($"Customer ID: {group.Key}");
        Console.WriteLine($"Order count: {group.Count()}");

        foreach (SalesOrderHeader sale in group)
        {
            Console.WriteLine($"   Sale ID: {sale.SalesOrderID}");
        }
        Console.WriteLine("");
    }
}
Using context As New AdventureWorksEntities

    Dim query = context.SalesOrderHeaders _
        .GroupBy(Function(order) order.CustomerID)

    ' Iterate over each IGrouping
    For Each group In query

        Console.WriteLine("Customer ID: {0}", group.Key)
        Console.WriteLine("Order Count: {0}", group.Count)

        For Each sale In group
            Console.WriteLine("   Sale ID: {0}", sale.SalesOrderID)
        Next

        Console.WriteLine("")

    Next

End Using

Ayrıca bkz.