次の方法で共有


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[]

このメソッドで使用される 0 個以上のパラメーター。

戻り値

GROUP BY が適用された元のインスタンスに相当する、DbDataRecord 型の新しい ObjectQuery<T> インスタンス。

例外

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 です。 詳しくは、「オブジェクト クエリ」をご覧ください。

適用対象

こちらもご覧ください