不可为null的System.DateTime的值

本文关键字:System DateTime 的值 null | 更新日期: 2023-09-27 18:21:41

以下代码适用于可为null的DateTime:

lastSync = syncHistsQuery.Max(m => m.Value);

为什么相同的代码不适用于不可为null的DateTime?错误如下:

'System.DateTime' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'System.DateTime' could be found (are you missing a using directive or an assembly reference ?)

我必须在数据库中将DateTime更改为可为Null的DateTime吗?有没有其他方法可以为不可为null的DateTimes编写代码?

以下是整个功能,以防有帮助:

public static DateTime GetMaxSyncDateTime()
{
    DateTime lastSync = DateTime.MinValue;
    using (var db = new CarbonContext())
    {
        var syncHistsQuery = from s in db.SyncHistories
                                 select s.SyncHistDateTime;
        lastSync = syncHistsQuery.Max(m => m.Value);
    }
    return lastSync;
}

不可为null的System.DateTime的值

"Nullable"DateTime?实际上是的语法糖

  Nullable<DateTime>

它有两个属性

  public Boolean HasValue
  public DateTime Value

http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx

DateTime本身有很多性质,但没有Value性质

http://msdn.microsoft.com/en-us/library/vstudio/system.datetime(v=vs.100).aspx

由于DateTime实现了IComparable<DateTime>,所以只需使用Max():

lastSync = syncHistsQuery.Max();

因为不可为null的DateTime没有Value属性。您使用

lastSync = syncHistsQuery.Max();

如果您正在使用DateTimes

DateTime没有.Value属性,这是来自Nullable<T>的属性。

你可以做:

lastSync = syncHistsQuery.Max(m => m);

或者,正如所指出的,你可以将其缩短为:

lastSync = syncHistsQuery.Max();