首页 > 解决方案 > 在 LINQ 查询中获取格式化的可为空日期字符串

问题描述

这似乎真的应该工作:

 var result = (from x in Db.RebateDetail
 where batch != null && batch != "" ? x.BatchNumber.Value == Convert.ToInt32(batch) : x.DatetimeCreated.Date >= Convert.ToDateTime(fromDate).Date && x.DatetimeCreated.Date <= Convert.ToDateTime(toDate).Date
 select new
     {
        id = x.Id,
        batchNumber = x.BatchNumber,
        firstName = x.FirstName,
        checkDate = x.CheckDate.Value.ToString("MM/dd/yy") ?? "",
        checkNumber = x.CheckNumber
     }).ToList();

checkDate 错误输出为“Nullable object must have a value”。

这不是什么??应该做什么?我已经尝试了几种变化,但似乎无法让它快乐。

更新:这是使用实体框架和 LinqToEF

标签: c#entity-frameworklinq

解决方案


目前,“如果CheckDate为空”它将产生一个System.InvalidOperationException而不是在运算符的 RHS 上取值,??因此错误“可空对象必须有一个值”。

您需要确保 LHS 返回值或 RHS 返回值。

您正在寻找的是条件运算符 ?:

checkDate = x.CheckDate.HasValue ? 
          x.CheckDate.Value.ToString("MM/dd/yy") : string.Empty

推荐阅读