Как использовать такие методы, как DatePart или TruncateTime и т. Д. В Entity Framework Core 3.0? В Entity Framework 6.3.0 можно было вызвать, например,
DbFunctions.TruncateTime
, но сейчас такого метода нет. Я обнаружил, что что-то подобное можно сделать с помощью кода, показанного ниже, но мне не удалось заставить его работать, так как конструктор SqlFragmentExpression является внутренним:
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]
}));
}
Вот простой запрос LINQ, который япытаюсь заставить работать:
context.Books.Any(x => DbFunctions.TruncateTime(x.date) == data.Date);
Есть ли какой-то другой способ сделать это или, по крайней мере, кто-то работает над добавлением этих функций?
Редактировать 1
Чтобы прояснить мою проблему - мне нужно сгруппировать строки по результату DatePart позже.