2017-09-26 9 views
0

J'ai deux listes de parti de la personne requise dans Nomination. Un de PreEntity et un de PostEntity et je veux les comparer afin de trouver les changements dans la personne mais ne fonctionne pas bien que les deux listes aient beaucoup de personne commune.Comment comparer les deux listes de parti dans 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

Lire cette https://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2015/09/07/travail-avec-dynamique-crm-activity-party-listes-dans-c-plugins –

Répondre

1

Votre problème est supposé que Contains fait quelque chose de magique qu'il ne fait vraiment pas. Il utilise simplement la comparaison standard Equals pour la classe Object. Donc, à moins que les objets ne soient la même référence exacte (et ils ne le seront pas dans ce cas), ils ne trouveront jamais l'objet dans la collection Entités.

Vous devez d'abord juste obtenir la liste des Ids des entités Postimage, recherche ensuite par ceux de l'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 
    } 
}