2011-08-24 35 views
1

有一个值我用以下Linq到Entitiy为了让我的“siteconfig”实体的第一个也是唯一的记录:可空对象必须在LINQ的

var site = unitofwork.SiteConfigRepository.Get().FirstOrDefault(); 

但是,当我的应用程序涉及到下面的代码,抛出“可空对象必须有一个值”:

if (site!= null) { TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate); } 

而在我的实体的唯一可空类型是一个名为logindDate属性是DateTime类型。

任何一个帮助我?

+2

这是抛出异常的确切行吗?如果不是,请展开代码并添加堆栈跟踪。 – BrokenGlass

+0

是的,我在那里放了一个断点,当应用程序到达那个点时,抛出一个异常。 –

+0

看看这个问题:http://stackoverflow.com/questions/1896185/nullable-object-must-have-a-value – BAKeele

回答

2

尝试这样:

if (site!= null) 
{ 
    if (site.loginDate.HasValue) 
    { TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate.Value); } 
} 

你是不是检查空loginDate,我怀疑这可能是问题。记住,当你有一个可为空的类型时,你需要检查HasValue,然后从Value属性中获取值。

0

如果列表中没有元素,IEnumerable.FirstOrDefault()将返回可枚举或默认(T)(通常为null,除非T是值类型)的第一个元素。很可能你的Get()返回一个空的枚举。如果你确定总是有一个且只有一个元素返回的列表,你应该使用Single()(因为那样你将会有一个异常(如果确实发生了什么)抛出该行),或者在 FirstOrDefault()之后针对null 进行测试。我认为最好的例外是抛出或处理意外行为的源头,而不是几行后。

+0

这不会解释问题,因为OP特别对'site'执行'null'检查 – BrokenGlass

+0

我确定始终在列表返回的元素上,但是我将使用single并再次测试应用程序。 [编辑]使用Single()不起作用。 –

相关问题