FetchXml link-entity element

聯結與 實體 或 連結實體 相關的資料表,以傳回包含結果的其他資料行。 也與 篩選 元素一起使用,以 對相關表格中的欄值套用條件。

瞭解如何使用 FetchXml 聯結資料表。

範例

下列範例顯示 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>

一對多關係

此查詢會根據連絡人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>

多對多關係

此查詢會使用teammembership_association多對多關係,從 SystemUser 和 Team 資料表傳回資料。

<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>

Attributes

名稱 Required? Description
name Yes 相關資料表的邏輯名稱。
to 否 父元素中資料行的邏輯名稱, 要 與屬性中 from 指定的相關資料表資料行相符。 雖然技術上不是必須,但通常會使用這個屬性。
from 否 相關表格 中 符合屬性中 to 指定直欄的直欄邏輯名稱。 雖然技術上不是必須,但通常會使用這個屬性。
alias 否 代表相關資料表的名稱。 如果您未設定別名,則會為您產生別名,以確保所有資料行都有唯一的名稱,但您將無法使用該別名來參考擷取 XML 其他部分中的連結實體。 自動產生的別名使用模式 {LogicalName}+{N},其中 N 是從 1 開始的擷取 XML 中連結實體的序號。
link-type 否 連結使用類型。 預設行為是 內部。 了解篩選相關紀錄的連結類型選項
intersect 否 表示 用 link-entity 來聯結資料表,且不傳回任何資料行,通常是針對多對多關聯性。 此屬性的存在不會變更查詢執行。 當您聯結表格時,您可以將此屬性新增至您的 link-entity 屬性,但不要包含任何 屬性元素 ,以顯示這是有意為之。

使用和fromto屬性

為屬性to設定值from。 利用這些屬性明確定義要匹配的欄位。 不過,技術上不需要 and fromto 屬性。

備註

如果你不使用這兩個屬性,且兩個資料表之間存在系統多對多關係,Dataverse 會利用該關係選擇適當的鍵值。

如果你只指定其中一個 from OR to 屬性,Dataverse 會嘗試利用兩個資料表之間的關係結構定義來找出正確的關係。

否則,會出現以下錯誤:

法典: 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 和團隊表格之間的teammembership_association多對多關係。 在這種情況下,Dataverse 可以計算出 from 和 to 屬性,而指定交集資料表的 則 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 值:

名稱 Description
inner Default. 將結果限制為兩個表格中具有相符值的資料列。
outer 包含父元素中沒有相符值的結果。
any 在 濾芯內使用它。 將結果限制為連結實體中具有任何相符列的父列。 瞭解如何使用 any 來篩選相關資料表上的值
not any 在 濾芯內使用它。 將結果限制為連結實體中沒有相符列的父列。 瞭解如何使用 not any 來篩選相關資料表上的值
all 在 濾芯內使用它。 將結果限制為父列,其中鏈結實體中存在具有相 from 符欄值的列,但 這些相符列都不 滿足為此鏈結實體定義的其他篩選器。 您需要 反轉 其他篩選器,以尋找父列,其中每個相符的連結實體列 都 滿足一些其他準則。 瞭解如何使用 all 來篩選相關資料表上的值
not all 在 濾芯內使用它。 將結果限制為連結實體中具有任何相符列的父列。 此連結類型相當於 any 儘管名稱。 瞭解如何使用 not all 來篩選相關資料表上的值
exists 它的變體 inner 可以提供性能優勢。 在子句中使用 where 條件。 當結果中不需要父列的多個副本時,請使用此選項。 進一步了解存在和
in 它的變體 inner 可以提供性能優勢。 在子句中使用 where 條件。 當結果中不需要父列的多個副本時,請使用此選項。 進一步了解存在和
matchfirstrowusingcrossapply 它的變體 inner 可以提供性能優勢。 當連結實體中只有相符資料列的單一範例就足夠了,而且不需要結果中父資料列的多個複本時,請使用此類型。 進一步瞭解 matchfirstrowusingcrossapply

父元素

名稱 Description
實體 指定 提取元素的子元素,即查詢的「父實體」。 只允許一個實體。
連結實體 聯結與 實體 或 連結實體 相關的資料表,以傳回更多包含結果的資料行。

子專案

名稱 發生次數 Description
所有屬性 0 或 1 表示會傳回每一列的所有非空值資料行值。 這與不添加任何 屬性元素相同。 在大多數情況下,我們不建議使用此元素。
屬性 0 或多個 指定實體或連結實體中的資料行,以搭配查詢傳回。
次 0 或多個 指定結果列的排序順序。
連結實體 0 或多個 聯結與 實體 或 連結實體 相關的資料表,以傳回更多包含結果的資料行。
篩選 0 或 1 指定要套用至查詢的 實體 或 連結實體 的複雜條件。