这是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;
我收到一条错误,指出找不到具有该名称的属性。
有什么建议吗?
答案 0 :(得分:2)
这里几件事:
首先,检索链接实体属性的方式不正确,属性以 alias.attributename 的格式返回(在这种情况下为pc.ic_end) )。
同时始终根据您的加入条件检查属性是否存在,并不总是返回该属性。检索属性逻辑应该符合以下几行:
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'
我收到一条错误,指出找不到具有该名称的属性。
只要您将链接类型指定为外部,就会返回所有联系人 带有或不带 电话通话记录。因此,这是一种预期的行为,您需要检查返回的属性列表中是否存在该属性。
如果您希望查询仅返回联系人记录 使用 进行电话呼叫,请使用自然的内部联接
<link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc'>