新手提问:
先上代码: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里又不让直接比较对象,只能比较里面的属性值啊
请问该怎么做?
先上代码: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里又不让直接比较对象,只能比较里面的属性值啊
请问该怎么做?
...
(et.TimeDiWen ?? default(DateTime)) == TimeDiWen,
...或者...
(et.TimeDiWen.HasValue ? et.TimeDiWen.Value : default(DateTime)) == TimeDiWen,
...
where (u.teacher ?? new Teacher()).Name == "张三"
select u;