we have a special method to compare dates and that special method resides in EF dll. No clue why Date.AddDays() does not work
No good reason. This was enabled in EF Core, which runs on .NET Framework as well as .NET Core. EG:
using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
namespace EfCoreTest
{
public class Article
{
[Key]
public int ArticleId { get; set; }
public string ArticleTitle { get; set; }
public DateTime StartDate { get; set; }
public int Period { get; set; }
}
public class Db : DbContext
{
readonly string connectionString;
public Db(): this("server=.;database=EfCoreTest;Integrated Security=true")
{
}
public Db(string connectionString)
{
this.connectionString = connectionString;
}
public DbSet<Article> Articles { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(connectionString);
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
class Program
{
static void Main(string[] args)
{
using (var db = new Db())
{
db.Database.EnsureDeleted();
db.Database.EnsureCreated();
var r = db.Articles.Where(p => p.StartDate.AddDays(p.Period) < DateTime.Now).ToList();
}
Console.ReadKey();
}
}
}
translates to
SELECT [p].[ArticleId], [p].[ArticleTitle], [p].[Period], [p].[StartDate]
FROM [Articles] AS [p]
WHERE DATEADD(day, [p].[Period], [p].[StartDate]) < GETDATE()