加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Asp.net Mvc 2:存储库,分页和过滤如何?

发布时间:2020-12-16 06:42:53 所属栏目:asp.Net 来源:网络整理
导读:将过滤器对象传递给存储库是有意义的,因此它可以限制返回的记录: var myFilterObject = myFilterFactory.GetBlank();myFilterObject.AddFilter( new Filter { "transmission","eq","Automatic"} );var myCars = myRepository.GetCars(myfilterObject); 关键
将过滤器对象传递给存储库是有意义的,因此它可以限制返回的记录:

var myFilterObject = myFilterFactory.GetBlank();
myFilterObject.AddFilter( new Filter { "transmission","eq","Automatic"} );
var myCars = myRepository.GetCars(myfilterObject);

关键问题:你将如何实现分页?有关如何从存储库返回LazyList的任何链接都将在此处应用?这会成为过滤器对象的一部分吗?就像是:

myFilterObject.AddFilter( new Filter { "StartAtRecord","45"} );
myFilterObject.AddFilter( new Filter { "GetQuantity","15"} );
var myCars = myRepository.GetCars(myfilterObject);

我假设存储库必须实现过滤,否则您将获得所有记录.

解决方法

我在服务层实现了分页/排序.我想有些人不同意这一点,但它对我来说很有用.确保您的存储库返回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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读