Compartilhar via


elemento link-entity

Une uma tabela relacionada à entidade ou à entidade de link para retornar colunas adicionais com o resultado. Também usado com elementos de filtro para aplicar condições em valores de coluna em tabelas relacionadas.

Saiba como unir tabelas usando FetchXml.

Exemplos

Os exemplos a seguir mostram o uso link-entity com diferentes tipos de relações.

Relação muitos para um

Essa consulta retorna dados da conta e tabelas de contato com base na coluna de pesquisa PrimaryContactId no registro da conta:

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

Relação um-para-muitos

Essa consulta retorna dados das tabelas de contato e conta com base no contato account_primary_contact relação um-para-muitos.

<fetch>
  <entity name='contact'>
    <attribute name='fullname' />
    <link-entity name='account' 
     from='primarycontactid' 
     to='contactid' 
     alias='account'>
      <attribute name='name' />
    </link-entity>
  </entity>
</fetch>

Relação muitos para muitos

Essa consulta retorna dados das tabelas SystemUser e Team usando a relação teammembership_association muitos para muitos.

<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

Nome Obrigatório? Description
name Yes O nome lógico da tabela relacionada.
to Não O nome lógico da coluna no elemento pai a ser correspondido com a coluna de tabela relacionada especificada no from atributo. Embora não seja tecnicamente necessário, esse atributo geralmente é usado.
from Não O nome lógico da coluna da tabela relacionada que corresponde à coluna especificada no to atributo. Embora não seja tecnicamente necessário, esse atributo geralmente é usado.
alias Não Representa o nome da tabela relacionada. Se você não definir um alias, será gerado um para garantir que todas as colunas tenham nomes exclusivos, mas você não poderá usar esse alias para fazer referência à entidade de link em outras partes do XML de busca. Os aliases gerados automaticamente usam o padrão {LogicalName}+{N}, onde N está o número sequencial da entidade de link no XML de busca a partir de 1.
link-type Não O tipo de uso de link. O comportamento padrão é interno. Saiba mais sobre opções de tipo de link
intersect Não Indica que o link-entity é usado para unir tabelas e não retornar colunas, normalmente para uma relação muitos para muitos. A existência desse atributo não altera a execução da consulta. Você pode adicionar esse atributo ao link-entity ingressar em uma tabela, mas não inclui nenhum elemento de atributo para mostrar que isso é intencional.

Uso from e to atributos

É melhor definir valores para os atributos e to os from atributos. Esses dois atributos geralmente são usados para definir explicitamente as colunas a serem correspondentes. No entanto, o atributo e o from atributo to não são tecnicamente necessários.

Observação

Se você não usar nenhum desses atributos e houver uma relação muitos para muitos entre as duas tabelas, o Dataverse selecionará os valores de chave apropriados usando essa relação.

Se você especificar apenas um dos atributos outo, o from Dataverse tentará descobrir a relação correta usando as definições de esquema de relação entre as duas tabelas.

Caso contrário, você receberá o seguinte erro:

Código: 0x80041102
Mensagem: 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.

Por exemplo, ambas as consultas usam a relação teammembership_association muitos para muitos entre tabelas do systemuser e da equipe . Nesse caso, o Dataverse pode descobrir os from atributos e to os link-entity que especificam a tabela de intersecção não são necessários.

Especificar todos os atributos

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

Permitir que o Dataverse escolha

<fetch top="2">
<entity name="systemuser">
<attribute name="fullname" />
<link-entity name="team" alias="team">
<attribute name="name" />
</link-entity>
</entity>
</fetch>

Use link-type para aplicar filtros nos registros retornados. A tabela a seguir descreve os valores válidos link-type :

Nome Description
inner Padrão. Restringe os resultados a linhas com valores correspondentes em ambas as tabelas.
outer Inclui resultados do elemento pai que não têm um valor correspondente.
any Use isso em um elemento de filtro. Restringe os resultados a linhas pai com todas as linhas correspondentes na entidade vinculada. Saiba como usar any para filtrar valores em tabelas relacionadas
not any Use isso em um elemento de filtro. Restringe os resultados a linhas pai sem linhas correspondentes na entidade vinculada. Saiba como usar not any para filtrar valores em tabelas relacionadas
all Use isso em um elemento de filtro. Restringe os resultados a linhas pai em que existem linhas com valor de coluna correspondente from na entidade de link, mas nenhuma dessas linhas correspondentes satisfaz os filtros adicionais definidos para essa entidade de link. Você precisa inverter os filtros adicionais para encontrar linhas pai em que cada linha de entidade de link correspondente satisfaça alguns critérios adicionais. Saiba como usar all para filtrar valores em tabelas relacionadas
not all Use isso em um elemento de filtro. Restringe os resultados a linhas pai com todas as linhas correspondentes na entidade vinculada. Esse tipo de link é equivalente a any apesar do nome. Saiba como usar not all para filtrar valores em tabelas relacionadas
exists Uma variante disso pode fornecer benefícios de inner desempenho. Usa uma condição EXISTS na where cláusula. Use isso quando várias cópias da linha pai não forem necessárias nos resultados. Saiba mais sobre exists e em
in Uma variante disso pode fornecer benefícios de inner desempenho. Usa uma condição IN na where cláusula. Use isso quando várias cópias da linha pai não forem necessárias nos resultados. Saiba mais sobre exists e em
matchfirstrowusingcrossapply Uma variante disso pode fornecer benefícios de inner desempenho. Use esse tipo quando apenas um único exemplo de uma linha correspondente da entidade vinculada for suficiente e várias cópias da linha pai nos resultados não forem necessárias. Saiba mais sobre matchfirstrowusingcrossapply

Elementos pai

Nome Description
entidade Especifica o elemento filho para um elemento fetch, a "entidade pai" para a consulta. Somente uma entidade é permitida.
link-entity Une uma tabela relacionada à entidade ou à entidade de link para retornar mais colunas com o resultado.

Elementos filho

Nome Ocorrências Description
todos os atributos 0 ou 1 Indica que todos os valores de coluna não nulos para cada linha são retornados. É o mesmo que não adicionar nenhum elemento de atributo. Não recomendamos usar esse elemento para a maioria dos casos.
atributo 0 ou muitos Especifica uma coluna de uma entidade ou entidade de link a ser retornada com uma consulta.
ordem 0 ou muitos Especifica uma ordem de classificação para as linhas dos resultados.
link-entity 0 ou muitos Une uma tabela relacionada à entidade ou à entidade de link para retornar mais colunas com o resultado.
filtro 0 ou 1 Especifique condições complexas para que uma entidade ou entidade de link se aplique a uma consulta.