2017-07-21 29 views
0

我连接到动态CRM如下之后检索结果:查询查找财产属性与“名”的商机实体 - Dynamics CRM Online中

CrmServiceClient crmConn = new CrmServiceClient(ConfigurationManager.ConnectionStrings["default"].ConnectionString); 
IOrganizationService crmService = crmConn.OrganizationServiceProxy; 

QueryExpression query = new QueryExpression("opportunity");  
query.Criteria = new FilterExpression(); 
query.Criteria.AddCondition("name", ConditionOperator.Like, "14%"); 

EntityCollection results = crmService.RetrieveMultiple(query); 

现在的名称是字符串类型的,我能够添加条件&执行操作&获得结果。

我的要求是我要添加另一个过滤器,这是一个查找属性“parentaccountid”。

我试图添加如下条件,但它抛出抛出异常错误,因为它只需要GUID。

query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "%In%"); 

注:parentaccountid的类型是Microsoft.Xrm.Sdk.EntityReference当我从早期的结果

检索的原因是,我们可以应用过滤器只能用于GUID parentaccountid。

有什么办法可以添加基于“名称”而不是“ID”的条件?

+0

我尝试了LinkEntities,但未能实现所需的功能。然而,@Dave Clark提供了我正在寻找的确切答案。谢谢戴夫。 – ashveli

回答

2

是,只需添加"name""parentaccountid"末:

query.Criteria.AddCondition("parentaccountidname", ConditionOperator.Like, "%In%"); 

你会发现,如果你创建一个高级查找这样的:

enter image description here

然后下载FetchXML,CRM只需追加"name"到查找属性名称的末尾:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> 
    <entity name="opportunity"> 
    <attribute name="name" />  
    <order attribute="name" descending="false" /> 
    <filter type="and"> 
     <condition attribute="parentaccountidname" operator="like" value="%In%" /> 
    </filter> 
    </entity> 
</fetch> 

另一种解决方案是使用LinkEntity,并查询链接帐户的名称。

+0

感谢戴夫这工作。但我尝试使用LinkEntity进行查询,但我无法找到此属性的实体“parentaccountid”。所以,我无法加入opprtunity实体。基本上,parentaccountid是一个查找字段。如何在查找字段上使用LinkEntity?你可以用这个答案延长你的答案吗? – ashveli

+0

嗨@ashveli,很高兴我能帮上忙。我想回答你的问题,你需要提出一个新问题(按照SO的指导方针)。话虽如此,[LinkEntity](https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.query.linkentity.aspx) –

+0

有很多博客帖子,甚至官方微软帖子通过很多文章,但我无法找到如何查询linkentity与查找属性。我能找到的只是查询机会和账户等实体。但是,机会和家长鼓励我没有运气,直到你提供了一种方式。再次感谢。我认为使用linkentity和lookup属性来查询是不可能的 – ashveli