我正在使用存储库模式,我有一个基本存储库,我使用实体框架和 web api;我的问题是我想让我的客户能够动态查询任何数据;Dynamics CRM 中使用的查询表达式和获取 xml 之类的东西;我尝试了规范模式,但这还不够,因为我想允许客户端代码对具有不同列的数据进行排序,例如 Name asc Address desc 并且还允许对返回的结果进行分页;所以我的方法要求是
- 不依赖于 ORM 技术的通用过滤器,因为我将来可能会更改实体框架
- 通用排序方法;允许多个排序列,例如 Name asc Address desc
- 客户端确定返回的列或所有列,例如 columnSet 为“地址、名称和 ID”或返回整个记录
- 允许分页,例如页面索引和页面大小
- 支持返回记录数的阈值,因为较大的结果可能会影响性能
这是我最初的方法,但我不知道它是否更好
IList<TEntity> AllMatching(ISpecification<TEntity> specification = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
IList<Expression<Func<TEntity, object>>> includes = null,
int? pageIndex = null, int? pageCount = null);