Compartir a través de


Cómo ejecutar una consulta polimórfica (EntityClient)

En este tema se demuestra cómo ejecutar una consulta de Entity SQL polimórfica con el operador OFTYPE.

Para ejecutar el código de este ejemplo

  1. Genere la aplicación CourseManager. Para obtener más información e instrucciones, vea el Tutorial rápido de Entity Framework.

  2. Modifique el EDM completando las instrucciones de la sección Implementar la herencia de tabla por jerarquía de Tutorial: asignar la herencia - tabla por Jerarquía.

Ejemplo

Una expresión OFTYPE especifica una expresión de un tipo que se emite para realizar una prueba del tipo con cada elemento de una colección. La expresión OFTYPE produce una nueva colección del tipo especificado que contiene sólo los elementos que eran equivalentes a ese tipo o a alguno de sus subtipos. Por ejemplo, dado que un Manager es un subtipo de Employee, la expresión siguiente produce una colección de jefes (managers) únicamente a partir de una colección de empleados (employees):

OfType(employees, Manager)

En el ejemplo siguiente se usa un operador OFTYPE para obtener y mostrar una colección únicamente de Students a partir de una colección de 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"]);
            }
        }
    }
}

Vea también

Tareas

Cómo crear y ejecutar consultas de objeto con herencia de tabla por jerarquía (Entity Framework)

Conceptos

Lenguaje Entity SQL

Otros recursos

Trabajar con EntityClient (tareas de Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand