Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c#返回可为空日期的正确方法是什么?_C#_Wcf_Datetime_Null_Nullable - Fatal编程技术网

用c#返回可为空日期的正确方法是什么?

用c#返回可为空日期的正确方法是什么?,c#,wcf,datetime,null,nullable,C#,Wcf,Datetime,Null,Nullable,我有一个WCF服务,它应该从某个范围返回特定机器的最大日志日期,或者如果该机器没有日志条目,则返回null: public DateTime? GetLastBootEvent(string laptopName) { ITDashboardDataContext itdb = new ITDashboardDataContext(); DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes

我有一个WCF服务,它应该从某个范围返回特定机器的最大日志日期,或者如果该机器没有日志条目,则返回null:

    public DateTime? GetLastBootEvent(string laptopName)
    {
       ITDashboardDataContext itdb = new ITDashboardDataContext();

       DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
                       where be.machineName.ToUpper() == laptopName.ToUpper()
                       select be.timestamp
                       ).Max();

      return latestEvent;

   }
但是,当我运行它时,会出现以下错误:

“由于内部错误,服务器无法处理该请求。有关该错误的详细信息, 在服务器上启用IncludeExceptionDetailInFaults(从ServiceBehaviorAttribute或从配置行为),以便发送 异常信息返回到客户端,或根据Microsoft.NET Framework SDK文档打开跟踪,并检查服务器跟踪日志。“

那里没有多少信息。我认为使用
DateTime?
而不是
DateTime
应该允许返回空值


我可以通过返回一些过去的随机日期的方法来处理这个问题,比如MinDate,但我想清楚地做到这一点

DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
                         where be.machineName.ToUpper() == laptopName.ToUpper()
                         select be.timestamp
                        ).DefaultIfEmpty(null).Max();

如果没有记录,将抛出一个没有它的异常。

您需要将查询中的时间戳转换为可为空的日期时间,即

DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
                       where be.machineName.ToUpper() == laptopName.ToUpper()
                       select (DateTime?)be.timestamp
                       ).Max();

我同意wiero的观点,看起来在执行过程中抛出了一些异常。要在客户端获取异常,您可以使用web.config中的IncludeExceptionDetailInFaults参数打开异常传输(例如,请看;不过最好在生产环境中关闭它)


如果您获得此异常详细信息,将更容易理解问题所在。

您可以打开跟踪以查看错误代码是否正常,我会胡乱猜测,说集合没有元素,max thorws a exceptionReturning nullable DateTime在wcfI中非常好。我看不出有任何理由相信该错误与nullable类型有关。您确定服务器方法中的其他内容不只是引发异常吗?我不确定这是不是约会时间的回归?这就是问题所在。如果时间戳不是日期时间?代码已经无法编译了。