Share via


パラメータ化クエリを実行する方法 (Entity Framework)

このトピックでは、ObjectQuery を使用して、パラメータ付きの Entity SQL クエリを実行する方法について説明します。例では、ObjectQuery に 2 つのパラメータを渡してクエリを実行し、Contact アイテムのコレクションを反復処理します。次の各 エンティティ フレームワーク クエリ テクノロジを使って同じことを行う例が紹介されています。

  • Entity SQL と ObjectQuery<T>

  • ObjectQuery<T> のクエリ ビルダ メソッド

このトピックの例には、AdventureWorks Sales Model (EDM) が使用されています。この例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、エンティティ フレームワーク が使用されるようにプロジェクトを構成しておく必要があります。具体的な方法については、「Entity Framework プロジェクトを手動で構成する方法」および「Entity Data Model を手動で定義する方法 (Entity Framework)」の手順を参照してください。Entity Data Model ウィザードを使用して、AdventureWorks Sales Model を定義することもできます。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」を参照してください。

以下は Entity SQL の例です。

Using advWorksContext As New AdventureWorksEntities
    Try
        ' Create a query that takes two parameters.
        Dim queryString As String = "SELECT VALUE Contact FROM AdventureWorksEntities.Contact " & _
            "AS Contact WHERE Contact.LastName = @ln AND " & _
            "Contact.FirstName = @fn"

        ' Add parameters to the collection.
        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, advWorksContext, MergeOption.NoTracking)
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        ' Iterate through the collection of Contact items.
        For Each result As Contact In contactQuery
            Console.WriteLine("Last Name: {0} First Name: {1}", _
            result.LastName, result.FirstName)
        Next

    Catch ex As EntityException
        Console.WriteLine(ex.ToString)
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using
using (AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities())
{
    try
    {
        // Create a query that takes two parameters.
        string queryString =
            @"SELECT VALUE Contact FROM AdventureWorksEntities.Contact 
                    AS Contact WHERE Contact.LastName = @ln AND
                    Contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, advWorksContext);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        // Iterate through the collection of Contact items.
        foreach (Contact result in contactQuery)
            Console.WriteLine("Last Name: {0}; First Name: {1}",
            result.LastName, result.FirstName);
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

これは、クエリ ビルダ メソッドの例です。

Dim firstName As String = "Frances"
Dim lastName As String = "Adams"

Using context As New AdventureWorksEntities
    Try
        ' Get the contacts with the specified name.
        Dim contactQuery As ObjectQuery(Of Contact) = _
            context.Contact _
            .Where("it.LastName = @ln AND it.FirstName = @fn", _
            New ObjectParameter("ln", lastName), _
            New ObjectParameter("fn", firstName))

        ' Iterate through the collection of Contact items.
        For Each result As Contact In contactQuery
            Console.WriteLine("Last Name:{0}First Name: {1}", _
            result.LastName, result.FirstName)
        Next

    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using
string firstName = @"Frances";
string lastName = @"Adams";

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Get the contacts with the specified name.
        ObjectQuery<Contact> contactQuery = context.Contact
            .Where("it.LastName = @ln AND it.FirstName = @fn",
            new ObjectParameter("ln", lastName), 
            new ObjectParameter("fn", firstName));

        // Iterate through the collection of Contact items.
        foreach (Contact result in contactQuery)
            Console.WriteLine("Last Name: {0}; First Name: {1}",
            result.LastName, result.FirstName);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

参照

処理手順

エンティティ型を返すクエリの実行方法 (Entity Framework)
匿名型を返すクエリの実行方法 (Entity Framework)
プリミティブ型を返すクエリの実行方法 (Entity Framework)

概念

Entity SQL 言語

その他のリソース

Entity Data Model のクエリ (Entity Framework タスク)