I would like to ask how to write a complex DateTime query in Entity Framework as below:
I have this code in service:
Func<DateTime, DateTime> calculate24HoursLater = (date) =>
{
if (date.DayOfWeek == DayOfWeek.Friday)
return date.AddDays(3);
if (date.DayOfWeek == DayOfWeek.Saturday)
return date.AddDays(3).Date;
if (date.DayOfWeek == DayOfWeek.Sunday)
return date.AddDays(2).Date;
return date.AddDays(1);
};
var unactionedEnquiries =
dataContext.ContactedBrokerEnquiries
.Include("ContactedBrokers")
.Where(
x => x.ContactedBrokers.All(c => c.Status == (byte)LeadStatus.Rejected) ||
x.ContactedBrokers.Any(c => c.Status == (byte)LeadStatus.New && calculate24HoursLater(c.CreatedDate) < DateTime.Now)
).OrderByDescending(c => c.CreatedDate);
The result unactionedEnquiries
, I expect it should be IQueryable. It means SQL server does not execute until my next statement
However, I get exception on calculate24HoursLater(c.CreatedDate) < DateTime.Now)
This statment cannot translate into SQL statement. I know the reason but I dont know how to write that rule
in Entity Framework
query
Important: I dont prefer to push all of data into RAM then filter with that condition. Ideally, it should be in SQL-Server
Could you please let me know how to write them in SQL-EF statement?