2013-03-21 54 views
2

我工作的一个自定义Web服务的CRM 2011的部署,现在我正在做这涉及到我们的一些实体进行了概述。我们有一个自定义的product实体,其中包含产品名称和类别等详细信息,我们有一个agreement实体,该实体将product链接到客户,并包含特定于该客户的产品详细信息。 agreementproduct具有N:1的关系。Dynamics CRM中2011 - 入门设定的N:1个的相关实体QueryExpression

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

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

回答

0

我看着LinkEntity,但我最终实现了我想要的东西。第二次查询与ConditionOperator.In做的,是这样的:

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

agreementList是一个数组Guid s。在发布问题之前,我也尝试了这一点,但是没有包装new ConditionExpression()中的参数,这些参数都无效。大概这是因为暗含的方式为AddCondition函数调用了错误的超载。

其他答案中的有用链接,但我也会考虑它们!

3

如果我理解你的问题吧,你只需要一个LinkEntity添加到您的产品实体上的第一个查询。您也可以指定产品实体的属性以返回,但它们返回为AliasedValues,因此请注意。

+0

他们**必须**返回为* AliasedEntity *实例吗?如果我们不使用别名 - 只是返回,然后默认命名?链接为+1。 – 2013-03-21 21:32:40

+0

@KonradViltersten,如果您想要使用Query Expressions从多个实体返回属性,那么不是来自主实体的任何属性将作为别名值返回。名称可以相同,但返回值的类型将为AliasedValues。 – Daryl 2013-03-22 01:08:32

+0

我添加了一个扩展方法来处理,然后变得非常方便,我忘记了后面的代码。多么尴尬...... :) – 2013-03-22 08:28:10

1

添加到Daryls答案,你可以看到this post关于如何链接实体的例子。 MSDN对这个主题感到困惑(至少对我来说)。

我提出了一个很好的查询表达式结构,而Daryl提出了一个更紧凑的等价表达式。 (我的是当然更好:d)