k80sg
k80sg

Reputation: 2473

Comparing nullable datetime

I am trying to compare dates in my linq query but my c.DateRequired is a nullable date field and I want to just compare the date without the time. How do I go about converting c.DateRequired in this case to just get the date.

   IEnumerable<SalesOrder> salesOrders = _uow.Repository<SalesOrder>().Query()
            .Filter(c => c.IsDeleted != true &&
                         (((c.DateRequired == DateTime.Today.Date)) && Period == 1) ||
                         (((c.DateRequired >= sDateP && c.DateRequired <= stDate)) &&
                          (Period == 2 || Period == 3)))
            .OrderBy(q => q.OrderBy(c => c.DateCreated))
            .Get()
            .Select(p => new
            {
                SalesOrder = p,
                SalesOrderDetailsList =
                    p.SalesOrderDetailsList.Where(pd => pd.IsDeleted != true),
                salesOrderDetailsComponentsList =
                    p.SalesOrderDetailsList.Select(c => c.SalesOrderDetailsComponentsList),
                SalesOrderDetailsComponentsInfoList =
                    p.SalesOrderDetailsList.Select(
                        i =>
                            i.SalesOrderDetailsComponentsList.Select(
                                info => info.SalesOrderDetailsComponentsInfoList))
            })
            .ToList()
            .Select(p => p.SalesOrder);

        return salesOrders;

    }

Upvotes: 3

Views: 2477

Answers (3)

Mihai Hantea
Mihai Hantea

Reputation: 1743

I answer to a similar question.

The recommended way to compare dates in linq queries if you are using EntityFramework 6 is DbFunctions.TruncateTime(m.PlanDate) and for previous versions EntityFunctions.TruncateTime(m.PlanDate)

Upvotes: 1

melvas
melvas

Reputation: 2356

Try to use something like this:

.Where(x => x.DateRequired.HasValue && 
            EntityFunctions.TruncateTime(x.DateRequired.Value) == EntityFunctions.TruncateTime(DateTime.Today))
.ToList();

It works perfectly for me.

Upvotes: 2

Amir Sherafatian
Amir Sherafatian

Reputation: 2083

you need to use EntityFunctions.TruncateTime which accept a nullable datetime to truncate time in linq

EntityFunctions.TruncateTime(x.DateRequired) == EntityFunctions.TruncateTime(DateTime.Today)

Upvotes: 1

Related Questions