首页 > 解决方案 > 平均 - EF 通用存储库

问题描述

我想将计算平均值的方法添加到我的实体框架通用存储库中。我真的可以这样做吗?我应该使用什么方法?这是我正在考虑的事情(这只是一个不好的例子作为起点)

    public double GetAverage(string property, Expression<Func<TEntity, bool>> filter = null) 
    {
        return BuildQuery(filter).Select(property).Average();
    }

或者做这个通用是个坏主意,我应该为特定实体创建特定的接口,其中的实现很清楚?

我现在的回购是

public interface IGenericRepository<TEntity> where TEntity : class
{
    void Delete(object id);
    void Delete(TEntity entityToDelete);

    TEntity GetFirst(Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");

    IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");

    PagedList<TEntity> GetPaged(int pageSize, int pageNumber, Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");

    TEntity GetByID(object id);
    void Insert(TEntity entity);
    void Update(TEntity entityToUpdate);
    }

构建查询是:

private IQueryable<TEntity> BuildQuery(
    Expression<Func<TEntity, bool>> filter = null,
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
    string includeProperties = "")
{
    IQueryable<TEntity> query = _dbSet;

    if (filter != null)
    {
        query = query.Where(filter);
    }

    foreach (var includeProperty in includeProperties.Split
        (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
        query = query.Include(includeProperty);
    }

    if (orderBy != null)
    {
        return orderBy(query);
    }
    else
    {
        return query;
    }
}

标签: c#entity-frameworkgenerics

解决方案


推荐阅读