在主细节关系中如何获取没有详细实体crm 2011的主实体列表?

时间:2013-05-29 16:15:15

标签: dynamics-crm-2011 entity-relationship

我正在使用CRM 2011,我在EntityA(主)和EntityB(详细信息)之间有1-n的关系。 我需要获取与任何EntityB记录无关的EntityA记录列表。如何使用查询表达式在插件中完成此操作?

1 个答案:

答案 0 :(得分:1)

我相信这应该有效(参见编辑,它不起作用):

var qe = new QueryExpression("entitya");
var entityBLink = qe.AddLink("entityb", "entityaid", "entityaid", JoinOperator.LeftOuter);
entityBLink.LinkCriteria.AddCondition("entitybid", ConditionOperator.Null);

它应该创建一个如下所示的SQL语句:

SELECT 
FROM entitya
LEFT OUTER JOIN entityb on entitya.entityaid = entityb.entityaid
    AND ( entityb.entitybid IS NULL ) 

编辑 - 工作版

var qe = new QueryExpression("entitya");
var entityBLink = qe.AddLink("entityb", "entityaid", "entityaid", JoinOperator.LeftOuter);
entityBLink.Columns.AddColumn("entitybid");
var entities = service.RetrieveMultiple(qe).Entities.
    Where(e => !e.Attributes.Keys.Any(k => k.EndsWith(".entitybid"))).
    Select(e => e.ToEntity<entitya>());

第一个查询的SQL语句确实按原样生成,但由于null检查在连接上并且它是左连接,所以返回所有EnityA实体。

坏消息是在CRM中无法执行子查询,或在where子句中指定链接实体的属性。我真的希望微软花一些时间在下一个主要版本中添加这种功能。

但是,您可以在客户端执行过滤器,这就是C#代码在上面执行的操作。