Sémantique de comparaison (Entity SQL)
L'exécution des opérateurs Entity SQL suivants implique une comparaison d'instances de type :
Comparaison explicite
Opérations d'égalité :
=
!=
Opérations de classement :
<
<=
>
>=
Opérations relatives à la possibilité de valeurs NULL :
IS NULL
IS NOT NULL
Distinction explicite
Distinction d'égalité :
DISTINCT
GROUP BY
Distinction de classement :
- ORDER BY
Distinction implicite
Opérations et prédicats de définition (égalité) :
UNION
INTERSECT
EXCEPT
SET
OVERLAPS
Prédicats d'élément (égalité) :
- IN
Combinaisons prises en charge
Le tableau suivant répertorie toutes les combinaisons prises en charge des opérateurs de comparaison pour chaque type :
Type | = != |
GROUP BY DISTINCT |
UNION INTERSECT EXCEPT SET OVERLAPS |
IN | <<= >>= |
ORDER BY | IS NULL IS NOT NULL |
---|---|---|---|---|---|---|---|
Type d'entité | Ref1 | Toutes les propriétés2 | Toutes les propriétés2 | Toutes les propriétés2 | Lever3 | Lever3 | Ref1 |
Type complexe | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 |
Ligne | Toutes les propriétés4 | Toutes les propriétés4 | Toutes les propriétés4 | Lever3 | Lever3 | Toutes les propriétés4 | Lever3 |
Type primitif | Spécifique au fournisseur | Spécifique au fournisseur | Spécifique au fournisseur | Spécifique au fournisseur | Spécifique au fournisseur | Spécifique au fournisseur | Spécifique au fournisseur |
Multiset | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 | Lever3 |
Ref | Oui5 | Oui5 | Oui5 | Oui5 | Throw | Throw | Oui5 |
Association type |
Lever3 | Throw | Throw | Throw | Lever3 | Lever3 | Lever3 |
1Les références des instances de type d'entité données sont comparées implicitement, comme l'illustre l'exemple suivant :
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != p2 OR p1 IS NULL
Une instance d'entité ne peut pas être comparée à une référence explicite. Lors d'une telle tentative, une exception est levée. Par exemple, la requête suivante lève une exception :
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != REF(p2)
2Les propriétés de types complexes sont aplanies avant leur envoi au magasin, afin qu’elles deviennent comparables (pour autant que toutes leurs propriétés soient comparables). Voir aussi 4.
3L'exécution d'Entity Framework détecte le cas non pris en charge et lève une exception explicite sans engager le fournisseur/magasin.
4Une tentative est faite pour comparer toutes les propriétés. Si une propriété est d'un type non comparable, tel que text, ntext ou image, une exception de serveur peut être levée.
5Tous les éléments individuels des références sont comparés (cela inclut le nom du jeu d'entités et toutes les propriétés clés du type d'entité).