Cómo ejecutar una consulta parametrizada (Entity Framework)

En este tema se muestra cómo ejecutar una consulta de Entity SQL con parámetros mediante ObjectQuery. En el ejemplo se pasan dos parámetros a la ObjectQuery, se ejecuta la consulta y se procesa una iteración de la colección de elementos Contact. Se muestra el mismo ejemplo con cada una de las siguientes tecnologías de consulta de Entity Framework:

  • Entity SQL con ObjectQuery<T>

  • Métodos del generador de consultas de ObjectQuery<T>

El ejemplo de este tema se basa en el Modelo AdventureWorks Sales (EDM). Para ejecutar el código de este ejemplo, debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para usar Entity Framework. Para ello, complete los procedimientos de Cómo configurar manualmente un proyecto de Entity Framework y Cómo definir manualmente un modelo Entity Data Model (Entity Framework). También puede utilizar el Asistente para Entity Data Model con el fin de definir el modelo AdventureWorks Sales. Para obtener más información, vea Cómo usar el Asistente para Entity Data Model (Entity Framework).

Ejemplo

A continuación se muestra el ejemplo de 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());
    }
}

A continuación se muestra el ejemplo del método del generador de consultas.

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());
    }
}

Vea también

Tareas

Cómo ejecutar una consulta que devuelve un tipo de entidad (Entity Framework)
Cómo ejecutar una consulta que devuelve un tipo anónimo (Entity Framework)
Cómo ejecutar una consulta que devuelve un tipo primitivo (Entity Framework)

Conceptos

Lenguaje Entity SQL

Otros recursos

Consultar un Entity Data Model (tareas de Entity Framework)