从 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'>
这是 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'>