非可空System.DateTime的值

时间:2014-09-11 13:01:10

标签: c# sql-server linq

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

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

为什么相同的代码不适用于不可为空的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更改为Nullable DateTime?是否有不同的方法为不可为空的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;
}

3 个答案:

答案 0 :(得分:4)

"可空" 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();

答案 1 :(得分:3)

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

lastSync = syncHistsQuery.Max();

如果您正在使用DateTimes

答案 2 :(得分:2)

DateTime没有.Value属性,属于Nullable<T>

你可以这样做:

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

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

lastSync = syncHistsQuery.Max();