DateTime Null

  • Thread starter Thread starter shapper
  • Start date Start date
S

shapper

Hello,

I have the following:

DateTime c = database.Posts.Max(b => b.CreatedAt).Value;

b.CreatedAt is of type "DateTime?"

The problem is when database.Posts is empty. I get an error:
Nullable object must have a value.

I understand that I get a null value but I am not able to apply ??
because it does not allow me.

How can I solve this?

Thanks,
Miguel
 
Can you be more explicit about what you mean by "it does not allow me"?  
You didn't post any code that tries to use the null coalescing operator  
(??).  There's not any particular reason why "it" (the compiler, I presume  
you mean) should not "allow" you to use it.

If you can post the code that you think should work but doesn't, we can  
help change that to code that does work.

Pete

Sure ... Sorry. I tried:

DateTime c = database.Boxes.Max(b => b.CreatedAt ?? DateTime.UtcNow);

Which seemed logic to me but I get:
The null value cannot be assigned to a member with type
System.DateTime which is a non-nullable value type.

I also tried:
DateTime c = database.Boxes.Max(b => b.CreatedAt).Value ??
DateTime.UtcNow;

But this one does not even compile and I get:
Operator '??' cannot be applied to operands of type 'System.DateTime'
and 'System.DateTime

Thanks,
Miguel
 
Ah.  Yes, it would do that when the database is empty.  But, if you move  
the coalescing operator out of the lambda expression, I think it should be  
okay:

     DateTime c = database.Boxes.Max(b => b.CreatedAt) ?? DateTime.UtcNow;

Note that that's subtly different from what you did try:


You can only use nullable types with the coalescing operator.  The  
Nullable<DateTime>.Value property is a non-nullable value type and so is  
an illegal operand for the operator.

Without a true concise-but-complete code sample, it's difficult to know  
for sure what will or won't work.  But I'm pretty sure the above should 
solve your problem.

Pete

Thank You Pete. I didn't know that about value ... I though it would
still be a nullable DateTime.
 
Back
Top