2017-09-26 128 views
0

我有約會中需要的人員的兩個派對列表。一個來自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-插件 –

回答

1

你的問題是你認爲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 
    } 
}