Zac*_*ott 4 asp.net-mvc paging filtering repository
将过滤器对象传递给存储库是有意义的,因此它可以限制返回的记录:
var myFilterObject = myFilterFactory.GetBlank();
myFilterObject.AddFilter( new Filter { "transmission", "eq", "Automatic"} );
var myCars = myRepository.GetCars(myfilterObject);
Run Code Online (Sandbox Code Playgroud)
关键问题:你将如何实现分页? 有关如何从存储库返回LazyList的任何链接都将在此处应用?这会成为过滤器对象的一部分吗?就像是:
myFilterObject.AddFilter( new Filter { "StartAtRecord", "eq", "45"} );
myFilterObject.AddFilter( new Filter { "GetQuantity", "eq", "15"} );
var myCars = myRepository.GetCars(myfilterObject);
Run Code Online (Sandbox Code Playgroud)
我假设存储库必须实现过滤,否则您将获得所有记录.
我在服务层实现了分页/排序.我想有些人不同意这一点,但它对我来说很有用.确保您的存储库返回IQueryable.
public class ProductService
{
private IRepository<Product> Products {get; set;}
public IEnumerable<ProductDto> GetProductsMatching(FilterCriteria criteria)
{
var products = Products.Query()
.Where( // do filtering )
.OrderBy( // order by )
.Skip(criteria.PageSize * criteria.CurrentPage)
.Take(criteria.PageSize);
var dtos = products.Select( // do mapping );
return dtos;
}
}
如何返回LazyList/IQueryable取决于您使用的ORM.我只熟悉NHibernate(使用Linq到NHibernate)和Linq2Sql.
| 归档时间: |
|
| 查看次数: |
2259 次 |
| 最近记录: |