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