可空对象必须在Linq中有一个值
本文关键字:Linq 有一个 对象 | 更新日期: 2023-09-27 18:06:28
我使用以下Linq到实体来获取我的'siteconfig'实体的第一个也是唯一的记录:
var site = unitofwork.SiteConfigRepository.Get().FirstOrDefault();
但是当我的应用程序遇到以下代码时,抛出'可空对象必须有一个值':
if (site!= null) { TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate ); }
我的实体中唯一的可空类型是一个名为logindDate的属性,它的类型是DateTime。
有谁能帮我一下吗?试试这样:
if (site!= null)
{
if (site.loginDate.HasValue)
{ TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate.Value ); }
}
您没有检查空loginDate
,我怀疑可能是问题所在。请记住,当您有一个可空类型时,您需要检查HasValue
,然后从Value
属性获取值。
IEnumerable.FirstOrDefault()返回可枚举对象的第一个元素,如果列表中没有元素,则返回default(T)(通常为null,除非T是值类型)。你的Get()很可能返回一个空的可枚举对象。
在一个相关的问题上(如果确实是这样的话),如果你确信列表总是只有一个元素返回,你应该使用Single()(因为你会在那一行抛出一个异常)或者在 FirstOrDefault()之后用null 测试它。我认为最好在意外行为的根源处抛出或处理异常,而不是在几行之后。