以下代码适用于可为空的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;
}
答案 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();