目前,我有一个像这样的Generic存储库:
public virtual IQueryFluent<TEntity> Query(Expression<Func<TEntity, bool>> query)
{
return new QueryFluent<TEntity>(this, query);
}
并按照以下方式实施:
var obj = _repository.Query(x => x.RoleID == ID).Select().FirstOrDefault();
因为,RoleID出现在所有实体中,所以我想在Generic Repository中构建一个Expression common,如下所示:
//Check and get RoleID if exist this column
PropertyInfo info = typeof(TEntity).GetProperty("RoleID");
if (info != null)
Expression<Func<TEntity, bool>> filter = (p => p.RoleID ??? or p.info ??? == 5);
我们如何在Generic Repository中使用TEntity中的未知列构建过滤器?或者我们可以为Filter传递一串where子句吗?
我的目的是,我只需要具有简单结构的查询数据:
var obj = _repository.Query().Select().FirstOrDefault();
请告知。
感谢。
答案 0 :(得分:0)
您可以使用界面修改具有RoleID的实体,例如:
interface IEntity { }
interface IRoleIdentifiedEntity : IEntity
{
int RoleID { get; }
}
对于所有实体,请使用通用存储库:
class GenericRepository<T> where T : IEntity
{
public IEnumerable<T> Query(Expression<Func<T, bool>> predicate)
{
throw new NotImplementedException();
}
}
对于IRoleIdentifiedEntity
的实体,请使用其他存储库:
class RoleIdentifiedRepositoryBase<T> : GenericRepository<T>
where T : IRoleIdentifiedEntity
{
public IEnumerable<T> Query(int id)
{
return Query(e => e.RoleID == id);
}
}