如何比较CRM 2016中的双方名单

问题描述:

我有约会中需要的人员的两个派对列表。一个来自PreEntity,另一个来自PostEntity,我想比较它们以找到人员的变化,但不起作用,尽管这两个列表有许多常见的人员。如何比较CRM 2016中的双方名单

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 
    } 
    } 
+0

阅读本https://community.dynamics.com/crm/b/magnetismsolutionscrmblog /存档/ 2015/09/07 /劳动与动力学-CRM活动,党名单,在-C-插件 –

你的问题是你认为Contains正在做一件神奇的事情,它真的没有做。它只是使用Object类的标准Equals比较。因此,除非对象具有相同的确切引用(并且它们不会在这种情况下),否则它将永远不会在Entities集合中找到该对象。

您需要先只要通过这些由ID获得postImage实体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 
    } 
}