如何为EF.Functions.DateDiff创建包装器

时间:2020-04-06 15:06:13

标签: c# asp.net entity-framework .net-core entity-framework-core

我知道我可以使用EF.Functions进行日期操作,但是我的问题是我正在使用带有通用存储库和UnitOfWork设计模式的Clean Architecture Framework,并且为了在服务中使用EF.Functions,我必须安装并在我的服务层中使用Microsoft.EntityFramework,这是反模式。 这是我的通用存储库中简单的Get方法之一:

   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,将来可能还会有更多)。

0 个答案:

没有答案