asp.net-mvc - Asp.net Mvc 2 : Repository, 分页和过滤如何?

标签 asp.net-mvc repository paging filtering

将过滤器对象传递给存储库是有意义的,因此它可以限制记录返回的内容:

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

关键问题:您将如何实现分页以及在哪里实现? 关于如何从存储库返回 LazyList 的任何链接,因为它适用于此处?这会是过滤器对象的一部分吗?就像是:
myFilterObject.AddFilter( new Filter { "StartAtRecord", "eq", "45"} );
myFilterObject.AddFilter( new Filter { "GetQuantity", "eq", "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 to NHibernate)和Linq2Sql。

关于asp.net-mvc - Asp.net Mvc 2 : Repository, 分页和过滤如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2489750/

相关文章:

c# - 在 ASP.NET 4.5 项目中使用 wwwroot 文件夹(ASP.NET Core 样式)

c# - ASP.NET MVC web 项目中的单元测试类是一个很好的例子吗?

java - 库(jar)应该进入存储库吗?

Eclipse Git 嵌套存储库未找到

c - 如何在代码片段中查找 TLB 未命中数?

javascript - 包括特定于 ASP.NET MVC4 View 或部分 View 的脚本

javascript - 我怎样才能复制这个 knockout 可观察到的?

repository - TYPO3/如何从现有表 fe_users 创建存储库?

android - 如何转换 PagedList 中的项目?(Android Arch 组件分页库)

paging - SmartGWT 分页如何工作?