可空对象必须在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。

有谁能帮我一下吗?

可空对象必须在Linq中有一个值

试试这样:

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 测试它。我认为最好在意外行为的根源处抛出或处理异常,而不是在几行之后。