比較語意 (Entity SQL)
執行以下任何 Entity SQL 運算子都會牽涉到型別執行個體的比較:
明確比較
相等運算:
=
!=
排序作業:
<
<=
>
>=
可為 Null 的運算:
IS NULL
IS NOT NULL
明確區分
相等區分:
DISTINCT
GROUP BY
排序區分:
- ORDER BY
隱含區分
Set 作業和述詞 (相等):
UNION
INTERSECT
EXCEPT
SET
OVERLAPS
Item 述詞 (相等):
- IN
支援的組合
下表針對每一種型別顯示比較運算子的所有支援組合:
Type |
= != |
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 |
擲回 |
擲回 |
是5 |
關聯 型別 |
擲回3 |
擲回 |
擲回 |
擲回 |
擲回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。
3Entity Framework 執行階段會偵測到不支援的案例,並擲回有意義的例外狀況,而不會佔用提供者/存放區。
4嘗試比較所有的屬性。如果某個屬性具有無法比較的型別 (如文字、ntext 或影像),可能會擲回伺服器例外狀況。
5參考的所有個別項目都會比較 (這包括實體集名稱及實體類型的所有 Key 屬性)。