Procédure : exécuter une requête polymorphe (EntityClient)
Cette rubrique montre comment exécuter une requête Entité SQL polymorphe à l'aide de l'opérateur OFTYPE.
Pour exécuter le code de cet exemple
Générez l'application CourseManager. Pour plus d'informations et d'instructions, voir le Démarrage rapide d'Entity Framework.
Modifiez son modèle EDM en suivant les instructions fournies dans la section Implémentation de l'héritage TPH (table par hiérarchie) de la Procédure pas à pas : mappage de l'héritage - TPH (table par hiérarchie).
Exemple
Une expression OFTYPE spécifie une expression de type émise pour effectuer un test de type sur chaque élément d'une collection. L'expression OFTYPE produit une nouvelle collection du type spécifié ne contenant que les éléments qui étaient équivalents à ce type ou à l'un de ses sous-types. Par exemple, un Manager étant un sous-type d'Employee, l'expression suivante produit à partir d'une collection d'employés (employee) une collection composée uniquement de responsables (manager) :
OfType(employees, Manager)
L'exemple ci-dessous utilise un opérateur OFTYPE pour obtenir et afficher une collection de Students uniquement, à partir d'une collection 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"]);
}
}
}
}
Voir aussi
Tâches
Concepts
Autres ressources
Utilisation d'EntityClient (Tâches Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand