我尝试将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(IEnumerable1 source) à System.Linq.OrderedEnumerable
1.d__0.MoveNext()à System.Linq.Enumerable.Count [TSource](IEnumerable`1 source)àxxxdans xxx 200
谢谢
答案 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属性。