为什么匿名类型实例不能接受实体框架查询返回的空值?当我尝试运行以下实体框架查询时:varl=(fromsindb.Samplesletaction=db.Actions.Where(x=>s.SampleID==x.SampleID&&x.ActionTypeID==1)。FirstOrDefault()wheres.SampleID==sampleIDselectnew{SampleID=s.SampleID,SampleDate=action.ActionDate,}).ToList();我收到以下异常:转换为值类型'DateTime'失败,因为物化值为null。结果类型泛型参数或查询必须使用可空类型。问题可能是Action.ActionDate在EF模型中被定义为不可为null的DateTime,但当没有相关操作分配给Sample时查询返回null。解决方案是返回一个具有可为空属性的非匿名类型,但为什么匿名类型不能接受一个空结果呢?是否有可能以某种方式强制创建具有可为空属性的匿名类型?您使用的是匿名类型,而不是泛型类型。匿名类型由编译器在编译时定义。最后,就像你创建了一个类MyEntity{publicreadonlyintSampleID;公共只读日期时间采样日期;}编译器根据您在new中=右侧使用的类型“选择”类型。因此,如果SampleID是int并且ActionDate是DateTime,那么将使用这些类型。现在,当实体框架执行查询并“反序列化”“MyEntity”类中的数据时,它会尝试将SQL接收到的null转换为DateTime,但转换失败。解决方案是将ActionDate定义为DateTime?在匿名类型中:SampleDate=(DateTime?)action.ActionDate,或者当ActionDate为null时为SampleDate赋值:SampleDate=(DateTime?)action.ActionDate??default(DateTime),(这第二个解决方案未经测试,因为我附近没有SQLServer,如果有效,SampleDate将是DateTime并且将包含查询返回的日期或DateTime.MinValue如果日期isnull)以上是C#学习教程:为什么匿名类型实例不能接受实体框架查询返回的null值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
