Можно использовать SQL-функцию datepart, обернув ее атрибутом DbFunctionAttribute.Самое сложное - сказать ядру не обрабатывать параметр типа datepart в виде строки.Пример:
DbContext:
public int? DatePart(string datePartArg, DateTime? date) => throw new Exception();
public void OnModelCreating(DbModelBuilder modelBuilder) {
var methodInfo = typeof(DbContext).GetRuntimeMethod(nameof(DatePart), new[] { typeof(string), typeof(DateTime) });
modelBuilder
.HasDbFunction(methodInfo)
.HasTranslation(args => new SqlFunctionExpression(nameof(DatePart), typeof(int?), new[]
{
new SqlFragmentExpression(args.ToArray()[0].ToString()),
args.ToArray()[1]
}));
}
Запрос:
repository.Where(x => dbContext.DatePart("week", x.CreatedAt) > 10);
дополнительная информация: https://github.com/aspnet/EntityFrameworkCore/issues/10404
следите, чтобы не вызывать функцию DbFunctionметод на интерфейсе DbContext.Вызов должен происходить непосредственно в экземпляре DbContext.