リンク エンティティ要素
エンティティ または リンク エンティティ に関連するテーブルを結合して、結果を含む多くの列を返します。 また、関連するテーブルの列の値に条件を適用するために、フィルター要素と共に使用されます。
使用例
以下の例では、さまざまなタイプのリレーションシップで link-entity
を使用しています。
多対一のリレーションシップ
このクエリは、アカウント レコードの PrimaryContactId ルックアップ列に基づいて、アカウント テーブルとコンタクト テーブルからデータを返します:
<fetch>
<entity name='account'>
<attribute name='name' />
<link-entity name='contact'
from='contactid'
to='primarycontactid'
link-type='inner'
alias='contact'>
<attribute name='fullname' />
</link-entity>
</entity>
</fetch>
一対多のリレーションシップ
このクエリは、Contact account_primary_contact の一対多のリレーションシップ に基づいて、コンタクト テーブルと アカウント テーブルからデータを返します。
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<link-entity name='account'
from='primarycontactid'
to='contactid'
alias='account'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>
多対多のリレーションシップ
このクエリは、SystemUser テーブルと Team テーブルから teammembership_association 多対多のリレーションシップ を使用してデータを返します。
<fetch>
<entity name='systemuser'>
<attribute name='fullname' />
<link-entity name='teammembership'
from='systemuserid'
to='systemuserid' >
<link-entity name='team'
from='teamid'
to='teamid'
link-type='inner'
alias='team'>
<attribute name='name' />
</link-entity>
</link-entity>
</entity>
</fetch>
属性
件名 | 必須? | Description |
---|---|---|
name |
可 | 関連するテーブルの論理名です。 |
to |
いいえ | from 属性で指定された関連テーブル列と一致させる、親要素内の列の論理名。 技術的には必須ではありませんが、通常はこの属性が使用されます。 |
from |
いいえ | to 属性で指定された列と一致する関連テーブルの列に由来する論理名。 技術的には必須ではありませんが、通常はこの属性が使用されます。 |
alias |
いいえ | 関連テーブルの名前を表します。 エイリアスを設定しない場合、すべての列が一意な名前になるようにエイリアスが生成されますが、そのエイリアスを使用してフェッチ XML の他の部分でリンク エンティティを参照することはできません。 自動生成されるエイリアスは {LogicalName}+{N} パターンを使用し、N はフェッチ XML 内のリンク エンティティの 1 から始まる連番です。 |
link-type |
いいえ | リンクの使用タイプ。 既定の動作は 内部 です。 リンク タイプのオプションについて解説します |
intersect |
いいえ | link-entity がテーブルを結合するために使用され、通常は多対多の関係で列を返さないことを示します。 この属性が存在してもクエリの実行は変わりません。 テーブルを結合する際に、この属性を link-entity に追加することも可能ですが、意図的であることを示す属性要素を含めないでください。 |
from
と to
属性の使用
両方の値を from
と to
属性に設定するのが最良です。 これらの属性はどちらも通常、照合する列を明示的に定義するために使用されます。 しかし、from
と to
属性は技術的に必須ではありません。
注意
from
属性とto
属性で指定された列が同じタイプであることが重要です。 異なる列タイプの使用はサポートされていません。 列が同じタイプではない場合、Dataverse インフラストラクチャは変換を強制できる場合がありますが、これによりパフォーマンスが大幅に低下する可能性があります。FetchXml 内の
from
とto
属性の意味は、QueryExpression を使用してクエリを構成する ときに使用される、対応する LinkEntity.LinkFromAttributeName プロパティおよび LinkEntity.LinkToAttributeName プロパティとは逆になります。
これらの属性のどちらも使用せず、2 つのテーブル間にシステム多対多のリレーションシップが存在する場合、Dataverse がそのリレーションシップを使用して適切なキー値を選択します。
from
と to
属性いずれか 1 つだけを指定すると、Dataverse は 2 つのテーブル間のリレーションシップ スキーマ定義を使用して正しいリレーションシップを把握しようとします。
そうしない場合、次のエラーが発生します。
コード:
0x80041102
メッセージ:No system many-to-many relationship exists between <table A> and <table B>. If attempting to link through a custom many-to-many relationship ensure that you provide the from and to attributes.
たとえば、これらのクエリは両方とも、systemuser テーブルと team テーブル間の teammembership_association 多対多のリレーションシップを使用しています。 この場合、from
と to
の属性は Dataverse で解決でき、交差テーブルを指定する link-entity
は必要ありません。
すべての属性の指定
<fetch top="2">
<entity name="systemuser">
<attribute name="fullname" />
<link-entity
name="teammembership"
from="systemuserid"
to="systemuserid"
intersect="true"
>
<link-entity
name="team"
from="teamid"
to="teamid"
link-type="inner"
alias="team"
>
<attribute name="name" />
</link-entity>
</link-entity>
</entity>
</fetch>
Dataverse に選択させます
<fetch top="2">
<entity name="systemuser">
<attribute name="fullname" />
<link-entity name="team" alias="team">
<attribute name="name" />
</link-entity>
</entity>
</fetch>
リンクタイプ オプション
link-type
を使用して、返されたレコードにフィルターを適用します。 次の表は、有効な link-type
値について説明しています。
件名 | プロパティ |
---|---|
inner |
既定。 両方のテーブルで値が一致する行に結果を制限します。 |
outer |
一致する値を持たない親要素からの結果が含まれます。 |
any |
これを フィルター要素内で使用します。 結果を、リンクされたエンティティ内の一致する行を持つ親行に制限します。 any を使用して関連テーブルの値をフィルターする方法を解説します。 |
not any |
これを フィルター要素内で使用します。 リンクされたエンティティに一致する行がない親行に結果を制限します。 not any を使用して関連テーブルの値をフィルターする方法を解説します。 |
all |
これを フィルター要素内で使用します。 from 列の値が一致する行がリンク エンティティに存在するが、それらの一致する行のすべてがこのリンク エンティティに定義された追加フィルタを満たさない場合に、結果を親行に制限します。 追加フィルタを反転して、一致するリンク エンティティ行がすべて追加条件を満たす親行を見つける必要があります。 all を使用して関連テーブルの値をフィルターする方法を解説します。 |
not all |
これを フィルター要素内で使用します。 結果を、リンクされたエンティティ内の一致する行を持つ親行に制限します。 このリンク タイプは、名前を問わず、any と同等です。 not all を使用して関連テーブルの値をフィルターする方法を解説します。 |
exists |
inner のバリアントで、パフォーマンス上の利点があります。 where 句で EXISTS 条件を使用します。 親の行を複数コピーする必要がない場合に使用します。 exists と in に関する詳細情報 |
in |
inner のバリアントで、パフォーマンス上の利点があります。 where 句で IN 条件を使用します。 親の行を複数コピーする必要がない場合に使用します。 exists と in に関する詳細情報 |
matchfirstrowusingcrossapply |
inner のバリアントで、パフォーマンス上の利点があります。 このタイプは、リンクされたエンティティの一致する行の例が 1 つだけで十分で、結果に親行の複数のコピーが必要ない場合に使用します。 matchfirstrowusingcrossapply の詳細情報 |
親要素
件名 | Description |
---|---|
エンティティ | 取り込み要素 の子要素、つまりクエリの「親エンティティ」を指定します。 エンティティは 1 つだけ許可されます。 |
link-entity | エンティティ または リンク エンティティ に関連するテーブルを結合して、結果を含むさらに多くの列を返します。 |
子要素
件名 | 発生回数 | プロパティ |
---|---|---|
all-attributes | 0 または 1 | 各行のすべての非NULL列値が返されることを示します。 これは、属性要素を追加しないのと同じです。 ほとんどの場合、この要素の使用はお勧めしません。 |
attribute | 0 または多数 | クエリで返す エンティティ または リンク エンティティ の列を指定します。 |
オーダー | 0 または多数 | 結果の行の並べ替え順序を指定します。 |
link-entity | 0 または多数 | エンティティ または リンク エンティティ に関連するテーブルを結合して、結果を含むさらに多くの列を返します。 |
フィルター | 0 または 1 | クエリに適用するエンティティまたはリンク エンティティの複合条件を指定します。 |
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。