我试图将我的reader [3]对象转换为null,如果没有论坛的lastPostDate,则日期时间为null,但它说我缺少转换。错误:
无法确定条件表达式的类型,因为在<null>和’System.DateTime’ 之间没有隐式转换
<null>
public class Forums { public List<Forum> GetForums() { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CMS"].ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand("sproc_Forums_GetForums", conn); cmd.CommandType = CommandType.StoredProcedure; SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.Default); List<Forum> forums = new List<Forum>(); while (reader.Read()) { var title = reader[6].ToString(); var threadCount = (int)reader[5]; var lastPostTitle = reader[4].ToString(); // below is where im having a problem Nullable<DateTime> lastPostDate = (reader[3] == DBNull.Value ? null : Convert.ToDateTime(reader[3])); var lastPostBy = reader[2].ToString(); var forumGroup = reader[1].ToString(); var description = reader[0].ToString(); Forum forum = new Forum(0, "",DateTime.Now, reader["Title"].ToString(),description, 0,false,"","",DateTime.Now,true, forumGroup, (int)threadCount, lastPostBy, lastPostDate, lastPostTitle); forums.Add(forum);/**/ } return forums; } } }
下面是我的论坛类的类对象,具有可空的lastPostDate
public class Forum { public Forum(int forumID, string addedBy, DateTime addedDate, string title, string description, int parentID, bool moderated, string imageUrl, string updatedBy, DateTime? updatedDate, bool active, string forumGroup, int threadCount, string lastPostBy, Nullable<DateTime> lastPostDate, string lastPostTitle) { this.ForumID = forumID; this.AddedBy = addedBy; this.AddedDate = addedDate; this.Title = title; this.Description = description; this.ParentID = parentID; this.Moderated = moderated; this.ImageUrl = imageUrl; this.UpdatedBy = updatedBy; this.UpdatedDate = updatedDate; this.Active = active; this.ForumGroup = forumGroup; this.ThreadCount = threadCount; this.LastPostBy = lastPostBy; this.LastPostDate = lastPostDate; this.LastPostTitle = lastPostTitle; } private int _forumID; public int ForumID { get { return _forumID; } set { _forumID = value; } } private string _addedBy; public string AddedBy { get { return _addedBy; } set { _addedBy = value; } } private DateTime _addedDate = DateTime.Now; public DateTime AddedDate { get { return _addedDate; } set { _addedDate = value; } } private string _title = ""; public string Title { get { return _title; } set { _title = value; } } private string _description = ""; public string Description { get { return _description; } set { _description = value; } } private int _parentID = 0; public int ParentID { get { return _parentID; } set { _parentID = value; } } private bool _moderated = false; public bool Moderated { get { return _moderated; } set { _moderated = value; } } private string _imageUrl = ""; public string ImageUrl { get { return _imageUrl; } set { _imageUrl = value; } } private string _updatedBy = ""; public string UpdatedBy { get { return _updatedBy; } set { _updatedBy = value; } } private DateTime? _updatedDate = null; public DateTime? UpdatedDate { get { return _updatedDate; } set { _updatedDate = value; } } private bool _active = false; public bool Active { get { return _active; } set { _active = value; } } private string _forumGroup = ""; public string ForumGroup { get { return _forumGroup; } set { _forumGroup = value; } } private int _threadCount = 0; public int ThreadCount { get { return _threadCount; } set { _threadCount = value; } } private string _lastPostBy = ""; public string LastPostBy { get { return _lastPostBy; } set { _lastPostBy = value; } } private Nullable<DateTime> _lastPosteDate = null; public Nullable<DateTime> LastPostDate { get { return _lastPosteDate; } set { _lastPosteDate = value; } } private string _lastPostTitle = ""; public string LastPostTitle { get { return _lastPostTitle; } set { _lastPostTitle = value; } } }
您可能想要这样做:
DateTime? lastPostDate = (DateTime?)(reader.IsDbNull(3) ? null : reader[3]);
您遇到的问题是三元运算符希望在左侧和右侧之间进行可行的转换。而且null不能强制转换为DateTime。
请注意上面的工作,因为三元数的两面都是对象的。该对象显式转换为DateTime吗?哪个有效:只要reader [3]实际上是一个日期。