Joe Ruder
Joe Ruder

Reputation: 2194

getting a formatted nullable date string in a LINQ query

This really seems like it should be working:

 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();

The checkDate errors out with 'Nullable object must have a value.'

Is that not what the ?? should be doing? I have tried several variations on this but cannot seem to make it happy.

Update: This is using Entity Framework and LinqToEF

Upvotes: 0

Views: 306

Answers (1)

Ousmane D.
Ousmane D.

Reputation: 56433

Currently, "if CheckDate is null" it would yield a System.InvalidOperationException rather than take the value on the RHS of the ?? operator hence the error "Nullable object must have a value".

You'll need to ensure that either the LHS returns a value or the RHS does.

What you're looking for is the conditional operator ?:

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

Upvotes: 3

Related Questions