如何在CRM 2016中比较两方列表

时间:2017-09-26 14:44:15

标签: c# plugins crm dynamics-crm-2016 appointment

我在预约中有两个来自所需人员的党派名单。一个来自PreEntity,一个来自PostEntity,我想比较它们以便找到人的变化但是没有工作,尽管这两个列表中有很多普通人。

  var requiredPreImage = preImage.GetAttributeValue<EntityCollection>("requiredattendees");
  var requiredPostImage = postImage.GetAttributeValue<EntityCollection>("requiredattendees");
  foreach (var required in requiredPreImage.Entities)
  {
     if (!requiredPostImage.Entities.Contains(required))
     {
        SendEmail(); // you have deleted from appointment
     }
  }

1 个答案:

答案 0 :(得分:2)

你的问题是你已经假设包含正在做一些神奇的事情,它确实没有做到。它只是使用Equals类的标准Object比较。因此,除非对象是完全相同的引用(并且它们不会在这种情况下),否则它将永远不会在实体集合中找到对象。

您首先需要获取postImage实体的ID列表,然后通过ID搜索这些ID:

var requiredPreImage = preImage.GetAttributeValue<EntityCollection>("requiredattendees");
var requiredPostImageIds = postImage.GetAttributeValue<EntityCollection>("requiredattendees").Entities.Select(e => e.Id).Distinct().ToDictionary(id => id);
foreach (var required in requiredPreImage.Entities)
{
    if (!requiredPostImageIds.Contains(required.Id))
    {
        SendEmail(); // you have deleted from appointment
    }
}