Как выполнить параметризованный запрос (платформа Entity Framework)

В этом разделе показано, как выполняется запрос Entity SQL с параметрами с помощью ObjectQuery. В этом примере два параметра передаются ObjectQuery, запрос выполняется и проходит по коллекции элементов Contact. Один и тот же пример приводится с использованием всех следующих технологий запросов Entity Framework:

  • Entity SQL и ObjectQuery<T>

  • Методы построителя запросов класса ObjectQuery<T>

Пример в этом разделе основан на модели Модель AdventureWorks Sales (модель EDM). Чтобы запустить код, используемый в данном примере, нужно сначала добавить к проекту модель AdventureWorks Sales и настроить его для использования платформы Entity Framework. Для этого выполните инструкции из разделов Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (платформа Entity Framework). Для определения модели AdventureWorks Sales можно также использовать мастер моделей EDM. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (платформа 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

Другие ресурсы

Запросы к модели EDM (задачи Entity Framework)