2007-09-17

GroupBy

Mit der GroupBy-Methode können die angegebenen Felder im Resultat in einzelne Gruppen zusammengefasst werden.

Query Expression-Anweisung
Die folgende Anweisung gruppiert die City-Werte und gibt als Resultat den City-Wert und Anzahl, wie viel mal der Wert im Resultat vorkommt.

var qry = from pa in _db.Addresses
group pa by pa.City into pag
orderby pag.Key
select new { City = pag.Key, CityCount = pag.Count() };

SQL-Anweisung
Die Query Expression-Anweisung wird wie folgt als SQL-Anweisung übersetzt.

SELECT [t1].[City], [t1].[value] AS [CityCount]
FROM (
SELECT COUNT(*) AS [value], [t0].[City]
FROM [Person].[Address] AS [t0]
GROUP BY [t0].[City]
) AS [t1]
ORDER BY [t1].[City]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

Resultat
Im Resultat sind die Datensätze nach City-Wert gruppiert und die Anzahl der City-Werte in der Datenbanktabelle aufgelistet.

Query Expression-Anweisung mit mehreren Feldern
Auch mehrere Felder können für die Gruppierung der Daten mit der GroupBy-Methode verwendet werden. In dem folgenden Beispiel werden die Daten nach City und ModifiedDate Werten gruppiert.

Die einzelnen Felder, welche für die Gruppierung verwendet wurden, stehen unter der Key-Eigenschaft zur Verfügung.

var qry2 = from pa in _db.Addresses
group pa by new {pa.City, pa.ModifiedDate.Year} into pag
orderby pag.Key.City, pag.Key.Year
select new {
City = pag.Key.City,
Year = pag.Key.Year,
ModificationCount = pag.Count()};

SQL-Anweisung
Die beiden Felder, welche für die Gruppierung verwendet wurden, sind in der SQL-Anweisung auch ersichtlich.

SELECT [t2].[City], [t2].[value2], [t2].[value] AS [ModificationCount]
FROM (
SELECT COUNT(*) AS [value], [t1].[City], [t1].[value] AS [value2]
FROM (
SELECT DATEPART(Year, [t0].[ModifiedDate]) AS [value], [t0].[City]
FROM [Person].[Address] AS [t0]
) AS [t1]
GROUP BY [t1].[City], [t1].[value]
) AS [t2]
ORDER BY [t2].[City], [t2].[value2]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

Resultat
Als Resultat wird die Anzahl der Mutation pro City und pro Jahr zurückgegeben. In dem Beispiel ist ersichtlich, dass Adressen mit dem City-Wert Albany im Jahr 2002 und 2003 je zwei Modifikationen hat.

No comments: