Compartilhar via


ObjectQuery<T>.GroupBy(String, String, ObjectParameter[]) Método

Definição

Agrupa os resultados da consulta pelos critérios especificados.

public:
 System::Data::Objects::ObjectQuery<System::Data::Common::DbDataRecord ^> ^ GroupBy(System::String ^ keys, System::String ^ projection, ... cli::array <System::Data::Objects::ObjectParameter ^> ^ parameters);
public System.Data.Objects.ObjectQuery<System.Data.Common.DbDataRecord> GroupBy (string keys, string projection, params System.Data.Objects.ObjectParameter[] parameters);
member this.GroupBy : string * string * System.Data.Objects.ObjectParameter[] -> System.Data.Objects.ObjectQuery<System.Data.Common.DbDataRecord>
Public Function GroupBy (keys As String, projection As String, ParamArray parameters As ObjectParameter()) As ObjectQuery(Of DbDataRecord)

Parâmetros

keys
String

As colunas de chave pelas quais agrupar os resultados.

projection
String

Uma lista das propriedades selecionadas que define a projeção.

parameters
ObjectParameter[]

Zero ou mais parâmetros que são usados neste método.

Retornos

Uma nova instância de ObjectQuery<T> do tipo DbDataRecord que é equivalente à instância original com GROUP BY aplicado.

Exceções

O parâmetro query é null ou uma cadeia de caracteres vazia.

- ou -

O parâmetro projection é null ou uma cadeia de caracteres vazia.

Exemplos

Este exemplo cria um novo ObjectQuery<T> objeto que contém os resultados da consulta existente agrupada pelo nome do produto.

    using (AdventureWorksEntities context =
        new AdventureWorksEntities())
    {
        string queryString = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<DbDataRecord> productQuery2 =
            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.
        foreach (DbDataRecord result in productQuery2)
        {
            Console.WriteLine("Name: {0}; Count: {1}",
                result["pn"], result["count"]);
        }
    }
}

Este exemplo retorna um conjunto de registros de dados aninhados que contêm a Contact.LastName coluna, agrupadas e classificadas em ordem alfabética pela primeira letra de Contact.LastName.

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define the query with a GROUP BY clause that returns
    // a set of nested LastName records grouped by first letter.
    ObjectQuery<DbDataRecord> query =
        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.
    foreach (DbDataRecord rec in
        query.Execute(MergeOption.AppendOnly))
    {
        Console.WriteLine("Last names that start with the letter '{0}':",
                    rec[0]);
        List<DbDataRecord> list = rec[1] as List<DbDataRecord>;
        foreach (DbDataRecord r in list)
        {
            for (int i = 0; i < r.FieldCount; i++)
            {
                Console.WriteLine("   {0} ", r[i]);
            }
        }
    }
}

Comentários

GroupBy aplica a projeção especificada pelo projection parâmetro . Isso significa que o ObjectQuery<T> retornado pelo GroupBy método é sempre do tipo DbDataRecord. Para obter mais informações, confira Consultas de objeto.

Aplica-se a

Confira também