比较crm id sdk早期绑定问题

本文关键字:绑定 问题 sdk crm id 比较 | 更新日期: 2023-09-27 18:17:16

我尝试将Linq中的2 Guid与Crm请求进行比较,但它不起作用。我不明白为什么:

Guid IdThematique = new Guid(ddlThematique);
Sollicitations = Sollicitations.Where(i => i.Sollicitation.SubjectId.Id == IdThematique);

这是捕获的:

系统。NullReferenceException: La ramexine d' object n'est pass damexineune实例d 'UN object。XXX . XXX . XXX 74 . comSystem.Linq.Enumerable.WhereListIterator 1.MoveNext() à System.Linq.Buffer 1..ctor(IEnumerable 1 source) à System.Linq.OrderedEnumerable 1.d__0.MoveNext()System.Linq.Enumerable。Count[TSource](IEnumerable ' 1 source) xxx个数据xxx 200

谢谢

比较crm id sdk早期绑定问题

可能您有Subject未填充且i.Sollicitation.SubjectId为空的记录。

从我的头顶,下面的东西应该使它工作:

Sollicitations.Where(i => (i.Sollicitation.SubjectId != null && i.Sollicitation.SubjectId.Id == IdThematique))

我同意Mario的观点,但我想让它成为一个扩展方法:

更简洁的版本:

public static class EntityReferenceExtensions{
    public static Guid GetIdOrDefault(this EntityReference entity){
        return (entity ?? new EntityReference()).Id;
    }
}

更可读的版本:

public static class EntityReferenceExtensions{
    public static Guid GetIdOrDefault(this EntityReference entity){
        if(entity == null){
            return Guid.Empty;
        } else {
            return entity.Id;
        }
    }
}

但是使用扩展方法,您可以处理任何实体对象的任何实体引用(早期或晚期绑定)

Sollicitations.Where(i => (i.Sollicitation.SubjectId.GetIdOrDefault() == IdThematique))

虽然现在我想了想,我不认为这适用于linq的CRM。

您正在将ddlThematique转换为Guid,我认为这是错误的。你需要使用ddlThematique的Text属性