0

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

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

这是捕获的:

System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet。à XXX dans XXX 74 à System.Linq.Enumerable.WhereListIterator 1.MoveNext() à System.Linq.Buffer1..ctor(IEnumerable 1 source) à System.Linq.OrderedEnumerable1.d__0.MoveNext() à System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)à xxx dans xxx 200

谢谢

4

3 回答 3

3

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

从我的头上看,下面的东西应该使它起作用:

Sollicitations.Where(i => (i.Sollicitation.SubjectId != null && i.Sollicitation.SubjectId.Id == IdThematique))
于 2013-06-07T09:06:47.990 回答
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;
        }
    }
}

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

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

尽管现在我考虑了一下,但我认为这不适用于 linq to CRM。只是 Linq 到对象。

于 2013-06-07T12:12:22.727 回答
-1

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

于 2013-06-08T09:32:23.907 回答