Эквивалент SqlFunctions.DatePart в EF Core - PullRequest
0 голосов
/ 27 сентября 2018

Что эквивалентно следующему утверждению в EF Core?

SqlFunctions.DatePart("week", x.MyDate)

EF.Functions, по-видимому, не имеет DatePart метода.

1 Ответ

0 голосов
/ 07 июня 2019

Можно использовать 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.

...