Семантика сравнений (язык Entity SQL)
Выполнение любого следующего оператора Entity SQL подразумевает сравнение типов экземпляров.
Явное сравнение
Операции сравнения:
=
!=
Операции упорядочивания:
<
<=
>
>=
Операции допустимости значений NULL:
IS NULL
IS NOT NULL
Явное отличие
Отличие равенства:
DISTINCT
GROUP BY
Отличие упорядочивания:
- ORDER BY
Неявное отличие
Операция и предикаты для работы с наборами (равенство):
UNION
INTERSECT
EXCEPT
SET
OVERLAPS
Предикаты элементов (равенство):
- IN
Поддерживаемые сочетания
В следующей таблице приводятся все поддерживаемые сочетания операторов сравнения для каждого типа.
Тип |
= != |
GROUP BY DISTINCT |
UNION INTERSECT EXCEPT SET OVERLAPS |
IN |
< <= > >= |
ORDER BY |
IS NULL IS NOT NULL |
Тип сущности |
Ссылка1 |
Все свойства2 |
Все свойства2 |
Все свойства2 |
Создание исключения3 |
Создание исключения3 |
Ссылка1 |
Сложный тип |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Строка |
Все свойства4 |
Все свойства4 |
Все свойства4 |
Создание исключения3 |
Создание исключения3 |
Все свойства4 |
Создание исключения3 |
Тип-примитив |
Зависит от поставщика |
Зависит от поставщика |
Зависит от поставщика |
Зависит от поставщика |
Зависит от поставщика |
Зависит от поставщика |
Зависит от поставщика |
Мультинабор |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
Ссылка |
Да5 |
Да5 |
Да5 |
Да5 |
Throw |
Throw |
Да5 |
Ассоциация тип |
Создание исключения3 |
Throw |
Throw |
Throw |
Создание исключения3 |
Создание исключения3 |
Создание исключения3 |
1Ссылки экземпляров заданного типа сущности неявно сравниваются, как показано в следующем примере:
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != p2 OR p1 IS NULL
Экземпляр сущности нельзя сравнивать с явной ссылкой. При попытке такого сравнения возникнет исключение. Например, следующий запрос вызовет исключение:
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != REF(p2)
2Свойства сложных типов выравниваются перед тем, как будут отправлены в хранилище, поэтому их можно сравнивать (если сравнимы их свойства). Также см. примечание 4.
3Среда выполнения платформы Entity Framework обнаруживает неподдерживаемый вариант и вызывает значимое исключение, не вовлекая поставщик или хранилище.
4Сделана попытка сравнить все свойства. Если имеется свойство несравнимого типа, например text, ntext или image, может возникнуть серверное исключение.
5Сравниваются все отдельные элементы ссылок (в том числе имя набора сущностей и все ключевые свойства этого типа сущности).