Exemples de syntaxe de requête fondée sur une méthode : regroupement (LINQ to Entities)
Les exemples de cette rubrique montrent comment utiliser la méthode GroupBy pour interroger le modèle de vente AdventureWorks Sales Model à l'aide de la syntaxe de requête fondée sur une méthode. Le modèle de vente AdventureWorks Sales Model utilisé dans ces exemples est construit à partir des tables Contact, Address, Product, SalesOrderHeader et SalesOrderDetail de l'exemple de base de données AdventureWorks.
Les exemples fournis dans cette rubrique utilisent les instructions using/Imports suivantes :
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;
Exemple
L'exemple suivant utilise la méthode GroupBy pour retourner les objets Address qui sont regroupés par code postal. Les résultats sont projetés dans un type anonyme.
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);
}
}
}
Exemple
L'exemple suivant utilise la méthode GroupBy pour retourner les objets Contact qui sont regroupés en fonction de la première lettre du nom de famille des contacts. Les résultats sont également triés selon la première lettre du nom de famille et projetés dans un type anonyme.
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);
}
}
}
Exemple
L'exemple suivant utilise la méthode GroupBy pour retourner les objets SalesOrderHeader qui sont regroupés par code client (Customer ID). Le nombre de ventes réalisées pour chaque client est également retourné.
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("");
}
}