linq查询中的空值会抛出空值错误

时间:2014-01-28 21:19:02

标签: c# asp.net

我从数据库中提取结果但是当列中出现空值时,我收到错误 并使用convert.todatetime格式化日期以在页面上的gridview中显示。

var ua = from utilacti in db.utility_activations
             where utilacti.ua_case_number == property.property_case_number 
             select new
             {
                 id = utilacti.ua_id,
                 Buyer = utilacti.ua_b,
                 BuyerPhone = utilacti.ua_b_p,
                 BuyerEmail = utilacti.ua_b_e,
                 BrokerAgent = utilacti.ua_ba_n,
                 BAPhone = utilacti.ua_b_p,
                 BAEmail = utilacti.ua_b_email,
                 Date = Convert.ToDateTime(utilacti.ua_d).ToShortDateString(),                                         
                 TonD = Convert.ToDateTime(utilacti.ua_td).ToShortDateString(),
                 ToffD = Convert.ToDateTime(utilacti.ua_tod).ToShortDateString(),
                 ApprovalD = Convert.ToDateTime(utilacti.ua_ad).ToShortDateString()
             };

我尝试将转换为以下内容以允许可以为空的

Convert.ToDateTime((DateTime?)utilacti.ua_td).ToShortDateString()

但它不起作用。

我试图检查空值。我试图在那里检查一个值,但是它出错了。

任何想法。

2 个答案:

答案 0 :(得分:3)

检查null,然后转换为:

Date = utilacti.ua_d == null ? "" : Convert.ToDateTime(utilacti.ua_d).ToShortDateString()

如果utilacti.ua_d类型为DateTime?Nullable<DateTime>,那么您可以这样做:

Date = utilacti.ua_d.HasValue ? utilacti.ua_d.Value.ToShortDateString() : "" //or null

如果您回来DBNull,那么您可以使用Convert.IsDbNull方法,例如:

Date = Convert.IsDBNull(utilacti.ua_d) ? "" : utilacti.ua_d.Value.ToShortDateString()

答案 1 :(得分:0)

感谢Habib,他让我朝另一个方向看。

Get short date for System Nullable datetime (datetime ?) in C#

ApprovalD = string.Format("{0:d}", utilacti.ua_ad)

似乎每次尝试将ToShortDateString()添加到可能的空值时,都会引发错误。无法解析空值。这不是DateTime obj。并尝试使用?:运算符进行检查会中断查询并引发错误。

但是string.Format只是忽略null。它只是有效。