Dynamics CRM 2011 - 使用QueryExpression获取N:1相关实体的集合

时间:2013-03-21 12:30:10

标签: c# .net dynamics-crm-2011

我正在为CRM 2011部署开发自定义Web服务,现在我正在概述与我们的某些实体相关的内容。我们有一个自定义product实体,其中包含产品名称和类别等详细信息,我们有一个agreement实体,它将product链接到客户并包含特定于该客户的产品详细信息。 agreementproduct有N:1的关系。

我现在正在制作一个概述页面,该页面将显示在CRM中的客户页面上,该页面应显示该客户的所有agreement。对于此显示,我还需要检索有关这些协议链接到的product的一些信息,这些信息将用于对概述页面上的agreement进行分组。我一直无法找到任何相关/具体的例子,我一直试图找到一种可行的方法来查询我需要的数据。

我想象的方式,我想使用两个查询来获取所需的数据。首先,获取客户所有agreement的查询。然后将此列表传递给第二个查询,该查询返回与第一个列表相交的所有product。这可能是使用QueryExpression,还是我需要遍历agreement列表并为每个单独的关联运行单独的查询?如果可能,我宁愿避免使用FetchXML

3 个答案:

答案 0 :(得分:3)

如果我理解您的问题,您只需要在第一个查询中向您的Product实体添加LinkEntity。您也可以指定要返回的Product实体的属性,但它们将返回AliasedValues,因此请注意这一点。

答案 1 :(得分:1)

添加到Daryls答案,您可以看到this post有关如何链接实体的示例。 MSDN对这个主题感到困惑(至少对我而言)。

我在那里提出了一个很好的查询表达式结构,而Daryl提供了一个更紧凑的等价物。 (我当然更好。:D)

答案 2 :(得分:0)

我查看了LinkEntity,但我最终在第二个查询中实现了我想对ConditionOperator.In做的事情,如下所示:

query.Criteria.AddCondition(
    new ConditionExpression(
        "myprefix_productid",
        ConditionOperator.In,
        agreementList )
);

agreementListGuid的数组。我在发布问题之前尝试了这个,但没有将参数包装在new ConditionExpression()中,但这些参数不起作用。可能这是因为隐式方法为AddCondition函数调用了错误的重载。

在其他答案中有用的链接,我也会研究它们!