Condividi tramite


Method-Based Esempi di Sintassi di Query: Raggruppamento

Negli esempi di questo argomento viene illustrato come usare il GroupBy metodo per eseguire query sul modello AdventureWorks Sales usando la sintassi di query basata su metodo. Il modello Di vendita AdventureWorks usato in questi esempi viene compilato dalle tabelle Contact, Address, Product, SalesOrderHeader e SalesOrderDetail nel database di esempio AdventureWorks.

Gli esempi in questo argomento usano le istruzioni using/Imports seguenti:

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

Esempio 1

Nell'esempio seguente viene utilizzato il GroupBy metodo per restituire Address oggetti raggruppati in base al codice postale. I risultati vengono proiettati in un tipo anonimo.

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

Esempio 2

Nell'esempio seguente viene utilizzato il GroupBy metodo per restituire Contact oggetti raggruppati in base alla prima lettera del cognome del contatto. I risultati vengono ordinati anche in base alla prima lettera del cognome e proiettati in un tipo anonimo.

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

Esempio 3

Nell'esempio seguente viene usato il GroupBy metodo per restituire SalesOrderHeader oggetti raggruppati in base all'ID cliente. Viene restituito anche il numero di vendite per ogni cliente.

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

Vedere anche