在LINQ查询中获取格式化的可为空的日期字符串

时间:2018-12-23 12:27:50

标签: c# entity-framework 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();

出现“ Nullable对象必须具有值”的checkDate错误。

那不是什么吗?应该做什么? 我对此进行了尝试,但似乎无法使其满意。

更新:这是使用Entity Framework和LinqToEF

1 个答案:

答案 0 :(得分:3)

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

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

您要查找的是条件运算符 ?:

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