比較語意 (Entity SQL)
執行以下任何 Entity SQL 運算子都會牽涉到類型執行個體的比較:
明確比較
相等運算:
=
!=
排序作業:
<
<=
>
>=
可為 Null 的運算:
是 NULL
IS NOT NULL
明確區分
相等區分:
DISTINCT
GROUP BY
排序區分:
- 排序依據
隱含區分
Set 作業和述詞 (相等):
UNION
INTERSECT
EXCEPT
SET
OVERLAPS
Item 述詞 (相等):
- 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 |
關聯 type |
擲回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 嘗試比較所有的屬性。 如果某個屬性具有無法比較的型別 (如文字、ntext 或影像),可能會擲回伺服器例外狀況。
5 參考的所有個別項目都會比較 (這包括實體集名稱及實體類型的所有 Key 屬性)。