从 FetchXML 访问二级链接实体

Access second level linked entity from FetchXML

这是 fetchXML:

<fetch version='1.0' mapping='logical' distinct='true'>
  <entity name='listmember'>
    <link-entity name='contact' from='contactid' to='entityid' alias='c'>
      <attribute name='contactid' />
      <attribute name='telephone1' />

      <link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc' link-type='outer'>
        <attribute name='activityid' />
        <attribute name='ic_end' />
        <filter type='and'>
          <filter type='or'>
            <condition attribute='statuscode' operator='eq' value='1' />
          </filter>
        </filter>
      </link-entity>

      <filter type='and'>
        <condition attribute='statecode' operator='eq' value='0' />
        <condition attribute='telephone1' operator='not-null' />
        <condition attribute='donotphone' operator='eq' value='0' />
      </filter>
    </link-entity>
    <filter type='and'>
      <condition attribute='listid' operator='in'><value>{ed0fa81c-1b65-e611-80ee-5065f38be311}</value></condition>
      <condition entityname='pc' attribute='activityid' operator='null' />
    </filter>
  </entity>
</fetch>

现在我想在通过 C# 中的 RetrieveMultiple 方法获取对象时访问 ic_end 属性。

我试图通过以下方式获取属性:

var endDate = (DateTime)((AliasedValue)contact["c.pc.ic_end"]).Value;

我收到一条错误消息,提示未找到具有该名称的属性。

有什么建议吗?

这里有几件事:

首先,您检索 linked 实体属性的方式不正确,属性 returned 格式为 alias.attributename(在本例中为pc.ic_end)。

还要始终根据您的加入条件检查属性是否存在,它可能并不总是 returned。检索属性逻辑应遵循:

if (contact.Attributes.Contains("pc.ic_end") && 
    contact.Attributes["pc.ic_end"] != null)
{
    var endDate = (DateTime) ((AliasedValue) contact["pc.ic_end"]).Value;
}

link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc' link-type='outer'

I got an error that no attribute with that name was found.

一旦您将 link 类型指定为外部,所有联系人 With OR Without phone 通话记录 returned。所以这是预期的行为,您需要检查属性列表中是否存在属性 returned.

如果您只想查询 return 一条联系记录 一个 phone 电话,使用自然内连接

<link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc'>