新手提问:
先上代码:rv = (from et in _dataContext.SampleGroups
                      where et.IsDiolameComplete == IsDiolameComplete && //bool
                        et.IsPieces == IsPieces && //bool
                        et.SampleCharacter.TermValue ==  SampleCharacter.TermValue &&  
                        et.SampleColor.TermValue == SampleColor.TermValue &&
                        et.SampleProperty.TermValue == SampleProperty.TermValue &&
                        et.SampleResult.TermValue == SampleResult.TermValue &&
                        et.SampleShape.TermValue == SampleShape.TermValue &&
                        et.SampleTakenPosition.TermValue == SampleTakenPosition.TermValue &&
                        et.SampleTakenSide.TermValue == SampleTakenSide.TermValue &&
                        et.SampleType.TermValue == SampleType.TermValue &&
                        et.TimeDiWen == TimeDiWen && //Datetime?
                        et.TimeLiTi == TimeLiTi && //Datetime?
                        et.TimeQuCai == TimeQuCai //Datetime?
                      select et).SingleOrDefault();所有我没注释的都是自定义对象。我要做的就是根据这堆属性找出数据库中相匹配的et,现在问题是我这堆自定义的对象有可能是空,那么继续引用里面的属性(TermValue),就会发生空引用异常。可是linq里又不让直接比较对象,只能比较里面的属性值啊
请问该怎么做?

解决方案 »

  1.   

    et.TimeDiWen == TimeDiWen ?? default(DateTime),
    ...
      

  2.   

    ...
    (et.TimeDiWen ?? default(DateTime)) == TimeDiWen,
    ...或者...
    (et.TimeDiWen.HasValue ? et.TimeDiWen.Value : default(DateTime)) == TimeDiWen,
    ...
      

  3.   

    这位大哥,我的错误不是出现在Time上,而是我自定义的对象中。那些对象有可能是null,如果是null,那里面的TermValue就不能引用了。
      

  4.   

    没关系啊。你给他一个默认的对象。比如var query = from u in students
                where (u.teacher ?? new Teacher()).Name == "张三"
                select u;