假设我想添加分页支持。 我的应用程序在Web,服务和存储库中分开。
Controller仅与服务对话,服务获取数据并执行业务逻辑。
说我想要分页支持..我在ContributorService中有这个方法
public IQueryable<Contributor> GetContributors(int page, int pageSize)
{
return _repository.GetAll().OrderBy(c=>c.ACC_CREATEDATE).Skip((page)*pageSize).Take(pageSize);//solo temporalmente
}
那可以吗?或者OrderBy,Skip,Take应该在存储库中完成吗?
目前只做这个
public IQueryable<Contributor> GetAll()
{
return db.Contributors;
}
答案 0 :(得分:0)
我会将查询添加到业务对象(我认为你没有一个,是吗),你可能有一个基本版本,另一个用于分页数据。并期望服务通过调用ToList来执行该查询,我发现将查询对象返回给控制器是危险的。
您的存储库可能有一个GetPartial方法,包含sort,from,to和filter params。如果您有通用服务,则可以在该通用服务中实现此功能。
public List<Contributor> GetPartial<TSortBy>(Expression<Func<Contributor, TSortBy>> sortByExpr, Expression<Func<Contributor, bool>> filterExpr, int pageNo, int pageSize)
{
var query = db.Contributors;
if (filterExpr != null)
query.Where(filterExpr);
query.orderBy(sortByExpr).Skip (...).Take(...).ToList();
}
如果您有Repository类,则可以添加此方法。 顺便说一句,我使用动态LINQ,这使得通过表达式将顺序传递为纯文本更容易(就像sql一样)