Мне известно, что я могу использовать EF.Functions для операций с датами, но моя проблема в том, что я использую чистую архитектуру Framework с шаблонами Generi c Repository и UnitOfWork и для использования EF.Functions в моих службах. Я должен установить и использовать Microsoft.EntityFramework в моем слое обслуживания, который является анти-паттерном. Это один из моих простых методов Get моего общего репозитория c:
public virtual async Task<List<TEntity>> GetAsync(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
return await orderBy(query).ToListAsync();
}
else
{
return await query.ToListAsync();
}
}
Это пример использования:
var result = await _UnitOfWork.ProductRepository.GetAsync(x => EF.Functions.DateDiffDay(x.Date1, x.Date2) > 5);
Я хочу иметь возможность создать оболочку для того же EF Функция date diff, которая делает то же самое, как это:
var result = await _UnitOfWork.ProductRepository.GetAsync(x => myCustomeDateDiffDay(x.Date1, x.Date2) > 5);
Я знаю, что есть функция под названием DbFunctionAttribute, но я не думаю, что это хорошая идея для реализации перевода sql, потому что я использую два поставщики баз данных (SqlServer и SqlLite и, возможно, больше на будущее).