This documentation is archived and is not being maintained.

ObjectQuery(Of T).GroupBy Method

Groups the query results by the specified criteria.

Namespace:  System.Data.Objects
Assembly:  System.Data.Entity (in System.Data.Entity.dll)

'Declaration
Public Function GroupBy ( _
	keys As String, _
	projection As String, _
	ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of DbDataRecord)

Parameters

keys
Type: System.String
The key columns by which to group the results.
projection
Type: System.String
The list of selected properties that defines the projection.
parameters
Type: System.Data.Objects.ObjectParameter()
Zero or more parameters that are used in this method.

Return Value

Type: System.Data.Objects.ObjectQuery(Of DbDataRecord)
A new ObjectQuery(Of T) instance of type DbDataRecord that is equivalent to the original instance with GROUP BY applied.

ExceptionCondition
ArgumentNullException

The query parameter is Nothing or an empty string.

-or-

The projection parameter is Nothing or an empty string.

GroupBy applies the projection specified by the projection parameter. This means that the ObjectQuery(Of T) returned by the GroupBy method is always of type DbDataRecord. For more information, see Object Queries (Entity Framework).

This example is based on the Adventure Works Sales Model.

This example creates a new ObjectQuery(Of T) object that contains the results of the existing query grouped by product name.


    Using context As New AdventureWorksEntities()
        Dim queryString As String = "SELECT VALUE product " & vbCr & vbLf & " FROM AdventureWorksEntities.Products AS product"

        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As ObjectQuery(Of DbDataRecord) = _
            productQuery.GroupBy("it.name AS pn", "Sqlserver.COUNT(it.Name) as count, pn")

        ' Iterate through the collection of Products 
        ' after the GroupBy method was called. 
        For Each result As DbDataRecord In productQuery2
            Console.WriteLine("Name: {0}; Count: {1}", result("pn"), result("count"))
        Next
    End Using
End Sub


This example returns a set of nested data records that contain the Contact.LastName column, grouped and sorted alphabetically by the first letter of Contact.LastName.


Using context As New AdventureWorksEntities()
    ' Define the query with a GROUP BY clause that returns 
    ' a set of nested LastName records grouped by first letter. 
    Dim query As ObjectQuery(Of DbDataRecord) = _
        context.Contacts.GroupBy("SUBSTRING(it.LastName, 1, 1) AS ln", "ln") _
        .Select("it.ln AS ln, (SELECT c1.LastName FROM AdventureWorksEntities.Contacts AS c1 " & _
                "WHERE SubString(c1.LastName, 1, 1) = it.ln) AS CONTACT").OrderBy("it.ln")

    ' Execute the query and walk through the nested records. 
    For Each rec As DbDataRecord In query.Execute(MergeOption.AppendOnly)
        Console.WriteLine("Last names that start with the letter '{0}':", rec(0))
        Dim list As List(Of DbDataRecord) = TryCast(rec(1), List(Of DbDataRecord))
        For Each r As DbDataRecord In list
            For i As Integer = 0 To r.FieldCount - 1
                Console.WriteLine(" {0} ", r(i))
            Next
        Next
    Next
End Using


.NET Framework

Supported in: 4, 3.5 SP1

.NET Framework Client Profile

Supported in: 4

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Show: