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

How to Compare two party lists in CRM 2016

我有两份来自约会中所需人员的派对名单。一个来自 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
     }
  }

您的问题是您假设 Contains 正在做一些它实际上没有做的神奇事情。它只是对 Object class 使用标准 Equals 比较。因此,除非对象是完全相同的引用(在这种情况下它们不会),否则它永远不会在 Entities 集合中找到该对象。

您需要先获取 postImage 实体的 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
    }
}