使用Dynamics CRM QueryExpression关联Contact无结果,求排查原因
问题分析与解决方案
你的QueryExpression写法参数设置本身是正确的,但问题大概率出在关联实体的获取方式,或是对QueryExpression返回结果结构的误解:
QueryExpression返回的主实体是account,关联的contact数据嵌套在每个account实体中,并非单独返回contact记录
LINQ查询会自动将关联实体封装到结果对象中,而QueryExpression需要你通过设置的EntityAlias主动从account实体中提取关联的contact数据。正确的获取代码应该是:foreach (var account in results.Entities) { // 通过设置的EntityAlias "contact" 获取关联的联系人实体 var contact = account.GetRelatedEntity("contact"); if (contact != null) { // 访问联系人属性 string firstName = contact.GetAttributeValue<string>("firstname"); string lastName = contact.GetAttributeValue<string>("lastname"); // ... } }如果你之前直接尝试从
results.Entities中筛选contact类型的实体,自然会得到0条结果。排查关联参数的正确性(若上述方法无效)
虽然你的命名参数看起来没问题,但可以尝试按AddLink方法的默认顺序编写代码,避免命名参数可能带来的混淆:LinkEntity le = query.AddLink("contact", "primarycontactid", "contactid", JoinOperator.Inner);同时可以将
JoinOperator改为JoinOperator.LeftOuter,即使存在关联数据异常的情况,也能返回account并显示对应的contact是否存在,帮助排查问题。
内容的提问来源于stack exchange,提问作者Alan Rutter
相关产品推荐
相关产品推荐

