c# - 平均 - 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;
}
}
解决方案
推荐阅读
- oauth-2.0 - 访问令牌 JWT 验证
- java.util.scanner - 谁能告诉我为什么 java.util.Scanner 抛出这个异常?
- python-3.x - Treeview 我可以选择列标题吗
- faker - 如何伪造一天范围内的温度变化
- sql - GROUP BY with Key:Value 过滤器为每个组
- jsf - JSF 寻找由 Integar 而非 List 或 Collections 控制的重复组件
- python - 训练我的 CNN 时出错:ValueError: Shape must be rank 2 but is rank 4
- angular - 错误无法验证,需要:BASIC realm="Sonatype Nexus Repository Manager" 同时将 Angular 从 11 升级到 12
- python - 两个日期时间之间的平均值;如果是 NaN,则获取最后一个非 NaN 值
- wix - Wix Bundle 和安装时间设置