Как создать обертку для EF.Functions.DateDiff - PullRequest
0 голосов
/ 06 апреля 2020

Мне известно, что я могу использовать 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 и, возможно, больше на будущее).

...