比较crm id sdk早期绑定问题

时间:2013-06-07 08:10:16

标签: c# linq dynamics-crm-2011 guid

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

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

这是抓住了:

  

System.NullReferenceException:Laréférenced'objetn'estdisdéfinie   àuneinstance d'un objet。 àXXdans XXX74à   System.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)àxxxdans   xxx 200

谢谢

3 个答案:

答案 0 :(得分:3)

可能您有未填写主题且i.Sollicitation.SubjectId为空的记录。

从我的头脑中,下面的内容应该能够起作用:

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

答案 1 :(得分:0)

我会同意马里奥,但我会把它作为一种扩展方法:

更简洁的版本:

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;
        }
    }
}

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

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

虽然现在我想到了,但我认为这不适用于linq到CRM。只是Linq to Objects。

答案 2 :(得分:-1)

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