【问题标题】:Null value in linq query throws null value errorlinq 查询中的空值引发空值错误
【发布时间】:2014-01-28 21:19:02
【问题描述】:

我正在从数据库中提取结果,但是当列中有空值时,我收到错误 并使用 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()

但它不起作用。

我尝试检查空值。我试图在那里做一个 if 来检查一个值,但它出错了。

任何想法。

【问题讨论】:

  • 尝试使用 DBNull.Value.Equals(utilacti.ua_td) 或任何你的列名
  • 意外类型代码:DBNull...不行
  • 我只是认为这是对var 和匿名类的滥用...如果您没有为 15 个不同的字段(其中一些是派生的)编写select,那么您从一开始就不会遇到这些问题。
  • 只是为了让你知道我添加了一个类来保存变量。不幸的是,这不是问题。它在于尝试将空值转换为日期时间。这总是会引发错误。一个简单的 string.Format 解决了一切。而且这与滥用 var 和匿名类没有任何关系。

标签: c# asp.net


【解决方案1】:

检查 null 然后转换为:

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

如果utilacti.ua_dDateTime?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()

【讨论】:

  • System.InvalidOperationException: 无法同时翻译表达式
  • 你让我思考。如果我这样做。 ApprovalD = (DateTime?)utilacti.ua_approval_date 它有效。但是当我尝试做shortdatestring或somethign时,它会出错
【解决方案2】:

多亏了 Habib,他让我转向了另一个方向。

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

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

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

但是 string.Format 只是忽略了 null。它只是工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2012-12-30
    • 2022-08-09
    相关资源
    最近更新 更多