Поделиться через


ObjectQuery<T>.GroupBy(String, String, ObjectParameter[]) Метод

Определение

Группирует результаты запроса по заданному критерию.

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)

Параметры

keys
String

Ключевые столбцы, по которым группируются результаты.

projection
String

Список выбранных свойств, определяющий проекцию.

parameters
ObjectParameter[]

Параметры (ноль или более), используемые в этом методе.

Возвращаемое значение

Новый экземпляр запроса ObjectQuery<T> типа DbDataRecord, эквивалентный первоначальному экземпляру с примененным к нему предложением GROUP BY.

Исключения

Параметр query имеет значение null или является пустой строкой.

-или-

Параметр projection имеет значение null или является пустой строкой.

Примеры

В данном примере создается новый объект ObjectQuery<T>, содержащий результаты существующего запроса, сгруппированные по названиям продуктов.

    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"]);
        }
    }
}

В этом примере возвращается набор вложенных записей данных, содержащих Contact.LastName столбец, сгруппированный и отсортированный в алфавитном порядке по первой букве 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]);
            }
        }
    }
}

Комментарии

GroupBy применяет проекцию, заданную параметром projection . Это означает, что свойство ObjectQuery<T>, возвращаемое методом GroupBy, всегда будет иметь тип DbDataRecord. Дополнительные сведения см. в разделе Запросы объектов.

Применяется к

См. также раздел