次の方法で共有


関数オーバーロードの解決 (Entity SQL)

このトピックでは、Entity SQL 関数の解決方法について説明します。

関数に一意のシグネチャがある限り、同じ名前で複数の関数を定義できます。

この場合、次の条件を適用して、特定の式によって参照される関数を決定する必要があります。 これらの条件は順番に適用されます。 1 つの関数にのみ適用される最初の条件は、解決された関数です。

  1. パラメーター番号。 この関数には、式で指定された同じ数のパラメーターがあります。

  2. 型での完全一致。 関数の各引数型は、パラメーター型と完全に一致するか、null リテラルです。

  3. サブタイプで一致します。 関数の各引数型は、パラメーター型のサブタイプと完全に一致するか、または引数が null リテラルです。 複数の関数が必要なサブタイプ変換の数でのみ異なる場合、サブタイプ変換の数が最も少ない関数は解決された関数です。

  4. サブタイプまたは型の昇格で一致します。 関数の各引数型が完全に一致するか、サブタイプであるか、パラメーター型に昇格できるか、引数が null リテラルです。 ここでも、複数の関数がサブタイプの変換と昇格の数でのみ異なる場合、サブタイプの変換と昇格の数が最も少ない関数は解決された関数です。

これらの条件のいずれも 1 つの関数が選択されない場合、関数呼び出し式はあいまいになります。

これらのルールを使用して 1 つの関数を抽出できる場合でも、引数がパラメーターと一致しない可能性があります。 この場合、エラーが発生します。

ユーザー定義関数の場合、ユーザー定義関数に適したシグネチャを持つモデル定義関数が存在する場合でも、インライン クエリ関数の定義が優先されます。

こちらも参照ください