Freigeben über


Beispiele für die methodenbasierte Abfragesyntax: Gruppierung (LINQ to Entities)

In diesem Thema wird anhand von Beispielen gezeigt, wie Sie mithilfe der GroupBy-Methode und der methodenbasierten Abfragesyntax das AdventureWorks Sales-Modell abfragen können. Für das in den Beispielen verwendete AdventureWorks Sales-Modell wurde auf die Tabellen Contact, Address, Product, SalesOrderHeader und SalesOrderDetail der AdventureWorks-Beispieldatenbank zurückgegriffen.

In den Beispielen in diesem Thema werden die folgenden using/Imports-Anweisungen verwendet:

Option Explicit On
Option Strict On
Imports System.Data.Objects
Imports System.Globalization
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;

Beispiel

Im folgenden Beispiel wird die GroupBy-Methode verwendet, um nach Postleitzahl gruppierte Address-Objekte zurückzugeben. Die Ergebnisse werden in einen anonymen Typ projiziert.

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
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var query = context.Addresses
        .GroupBy( address => address.PostalCode);                     
        
    foreach (IGrouping<string, Address> addressGroup in query)
    {
        Console.WriteLine("Postal Code: {0}", addressGroup.Key);
        foreach (Address address in addressGroup)
        {
            Console.WriteLine("\t" + address.AddressLine1 +
                address.AddressLine2);
        }
    }
}

Beispiel

Im folgenden Beispiel wird die GroupBy-Methode verwendet, um nach dem ersten Buchstaben des Nachnamens des Kontakts gruppierte Contact-Objekte zurückzugeben. Die Ergebnisse werden nach dem ersten Buchstaben des Nachnamens sortiert und in einen anonymen Typ projiziert.

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
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 '{0}':",
            group.Key);
        foreach (Contact contact in group)
        {
            Console.WriteLine(contact.LastName);
        }
        
    }
}

Beispiel

Im folgenden Beispiel wird die GroupBy-Methode verwendet, um nach Kunden-ID gruppierte SalesOrderHeader-Objekte zurückzugeben. Die Anzahl von Verkäufen für jeden Kunden wird ebenfalls zurückgegeben.

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
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var query = context.SalesOrderHeaders
        .GroupBy(order => order.CustomerID);
        
    foreach (IGrouping<int, SalesOrderHeader> group in query)
    {
        Console.WriteLine("Customer ID: {0}", group.Key);
        Console.WriteLine("Order count: {0}", group.Count());

        foreach (SalesOrderHeader sale in group)
        {
            Console.WriteLine("   Sale ID: {0}", sale.SalesOrderID);
        }
        Console.WriteLine("");                    
    }
}

Siehe auch

Konzepte

Abfragen in LINQ to Entities