我正在使用 CRM SDK 编写一个 API,以获取基于“assignedToName”的联系人,该联系人可以是系统用户名或团队名称。我正在使用查询表达式。问题是如何为此创建查询表达式和 LinkEntities?目前,用于联系人的 QueryExpression 有 2 个使用 LeftOuter 连接的链接实体。一个在 AssignedToID = SystemUserID 字段上从 Contact 到 SystemUser,另一个从 Contact 到 Team 在 AssignedToID = TeamID 字段上,其中“名称”字段 =“assignedToName”的 ConditionExpression
有 2 个链接实体的原因是因为我不知道“assignedToName”是属于团队还是属于用户。
这样做的副作用是,现在我在结果中有误报,由于 LeftOuter 连接,结果集中包含了额外的联系人记录。为此编写 QueryExpression 的正确方法是什么?
示例代码:
private IEnumerable<Entity> GetContactEntities(string assignedToName, IOrganizationService orgService)
{
QueryExpression qe = new QueryExpression("contact");
LinkEntity linkSystemUser = new LinkEntity("contact", "systemuser", "assignedtoid", "systemuserid", JoinOperator.LeftOuter);
LinkEntity linkTeam = new LinkEntity("contact", "team", "assignedtoid", "teamid", JoinOperator.LeftOuter);
linkSystemUser.LinkCriteria.AddCondition(new ConditionExpression("name",ConditionOperator.Equal,assignedToName));
linkSystemUser.EntityAlias = "linkSystemUser";
linkTeam.LinkCriteria.AddCondition(new ConditionExpression("name",ConditionOperator.Equal,assignedToName));
linkTeam.EntityAlias = "linkTeam";
qe.LinkEntities.Add(linkSystemUser);
qe.LinkEntities.Add(linkTeam);
return orgService.RetrieveMultiple(qe).Entities;
}