1

我正在nullable datetime使用IDataReader界面读回一个。到目前为止,我之前的专栏文章按预期工作。

除了["Implementation End Timestamp"]我尝试读回可为空的日期时间的这一列,将其转换为字符串并将其分配给名为Implementation_End_String.

所以这就是我尝试过的。首先读回DateTime?检查 null 的值,然后如果不为 null 则尝试转换 toString()。

但是由于它们是“字符串和日期时间之间没有显式转换?”,因此不允许此分配:

Implementation_End_String = dataReader["Implementation End Timestamp"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dataReader["Implementation End Timestamp"]).ToString("d-MMMM-yyyy"), //show full month name

我想我需要获取valueDateTime 来调用 toString() 。

问题:

如何将回读DateTime?值转换为字符串类型?

4

2 回答 2

3

每种Nullable<T>类型都有GetValueOrDefault方法。如果没有值,您可以使用此方法检索T(在您的情况下为)的值或默认值。DateTime.MinValue此方法将返回普通DateTime对象,因此您可以在其上调用任何ToString()方法。

于 2016-10-13T19:56:27.520 回答
3

IDataReader是一个相当古老的接口,因此不支持本机可为空的类型。如果您倾向于在代码中的许多地方使用它,您最好创建一些帮助程序,这将大大减少您的代码。例如,以下是 的辅助方法DateTime?,您可以轻松地对其他类型执行类似操作:

public static class DataReaderExtensions
{
    public static DateTime? GetNullableDateTime(this IDataReader source, string name)
    {
        return source.GetNullableDateTime(source.GetOrdinal(name));
    }
    public static DateTime? GetNullableDateTime(this IDataReader source, int i)
    {
        return !source.IsDBNull(i) ? source.GetDateTime(i) : (DateTime?)null;
    }
}

这与C#6 空条件运算符相结合将使相关任务变得简单:

Implementation_End_String = dataReader
    .GetNullableDateTime("Implementation End Timestamp")?.ToString("d-MMMM-yyyy") ?? "";
于 2016-10-13T20:40:53.167 回答