在linq语句上返回null异常

时间:2010-09-10 15:49:48

标签: c# linq nhibernate

这可能是一个非常简单的原因,但是当给对象保湿时,我会一直得到“值不能为空”的例外:

public class MyObject
{
   public MyObject() {
    }  

    public virtual IList<MemberObject> MemberObjects { get; protected set; }              

    [JsonProperty] public virtual SubObject LastMemberObject {
        get { return MemberObjects.OrderByDescending(x => x.CreatedOn).FirstOrDefault() ?? null; }
    }
 }

在对对象进行水合时,如果MemberObjects为null,则LastMemberObject会抛出一个不能为空的异常。这是什么交易?

2 个答案:

答案 0 :(得分:0)

如果对象MemberObjects为null,则无法在其上调用任何实例方法。

[JsonProperty]
public virtual SubObject LastMemberObject {
    get {
        return MemberObjects != null
           ? MemberObjects.OrderByDescending(x => x.CreatedOn).FirstOrDefault()
           : null; }
    }

此外,当您调用FirstOrDefault()方法时,也必须指定此默认值。

MemberObjects
.OrderByDescending (x => x.CreatedOn)
.Default (something)
.FirstOrDefault ();

答案 1 :(得分:0)

如果MemberObjects为null,则在尝试访问OrderByDescending等方法或属性时会出现此异常。试试这个:

[JsonProperty] public virtual SubObject LastMemberObject {
        get { return MemberObjects != null? MemberObjects.OrderByDescending(x => x.CreatedOn).FirstOrDefault() : null; }
    }