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


Как Выполнение полиморфного запроса (EntityClient)

В этом разделе приведено описание того, как выполнить полиморфный запрос Entity SQL с использованием оператора OFTYPE.

Выполнение кода в этом примере

  1. Постройте приложение CourseManager. Дополнительные сведения и инструкции см. в разделе Entity Framework Quickstart.

  2. Внесите изменения в эту модель EDM, руководствуясь указаниями в подразделе «Реализация наследования типа "одна таблица на иерархию"» раздела Пошаговое руководство: наследование сопоставления типа «одна таблица на иерархию».

Примеры

Выражение OFTYPE задает выражение с определением типа, которое применяется для выполнения проверки типа по отношению к каждому элементу коллекции. Выражение OFTYPE позволяет получить новую коллекцию указанного типа, содержащую только те элементы, которые были эквивалентны либо этому типу, либо его подтипу. Например, если предположить, что Manager представляет собой подтип типа Employee, то следующее выражение обеспечивает получение из коллекции сотрудников только тех элементов, которые представляют руководителей:

OfType(employees, Manager)

В следующем примере используется оператор OFTYPE для возврата и отображения коллекции только элементов Students из коллекции People.

Using connection As EntityConnection = New EntityConnection("name= SchoolEntities ")
    connection.Open()

    ' Create a query that specifies to 
    ' get a collection of Students
    ' with enrollment dates from
    ' a collection of People.
    Dim esqlQuery As String = "SELECT Student.LastName, " & _
            " Student.EnrollmentDate FROM " & _
            " OFTYPE(SchoolEntities.Person, " & _
            " SchoolModel.Student) AS Student "

    ' Create an EntityCommand and pass the connection object 
    ' and Enity SQL query to its constructor.
    Using command As EntityCommand = New EntityCommand(esqlQuery, connection)
        ' Execute the command.
        Using reader As DbDataReader = command.ExecuteReader(CommandBehavior.SequentialAccess)
            ' Start reading.
            Do While reader.Read
                ' Display student's last name and enrollment date.
                Console.Write(reader.Item("LastName"))
                Console.WriteLine(reader.Item("EnrollmentDate"))
            Loop
        End Using
    End Using
End Using
using (EntityConnection conn = new EntityConnection("name=SchoolEntities"))
{
    conn.Open();
    // Create a query that specifies to 
    // get a collection of only Students
    // with enrollment dates from 
    // a collection of People.
    string esqlQuery = @"SELECT Student.LastName, 
        Student.EnrollmentDate FROM 
        OFTYPE(SchoolEntities.Person, 
        SchoolModel.Student) AS Student";

    using (EntityCommand cmd = new EntityCommand(esqlQuery, conn))
    {
        // Execute the command.
        using (DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            // Start reading.
            while (rdr.Read())
            {
                // Display student's last name and enrollment date.
                Console.Write(rdr["LastName"] + " ");
                Console.WriteLine(rdr["EnrollmentDate"]);
            }
        }
    }
}

См. также

Задачи

Как создавать и выполнять запросы объектов с помощью наследования типа «одна таблица на иерархию» (платформа Entity Framework)

Основные понятия

Язык Entity SQL

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

Работа с EntityClient (задачи платформы Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand