【问题标题】:Comprehensive sorting/paging/filtering service layer interface method综合排序/分页/过滤服务层接口方法
【发布时间】:2011-03-28 22:05:07
【问题描述】:

我正在尝试编写一个服务层方法,该方法将采用所有必要的参数,使我能够以 webforms 网格的工作方式从存储库中获取数据。

存储库返回IQueryable<T>

我想出了一个这样的模型:

public class PagedModel<T>
{
    public GridSortOptions GridSortOptions { get; set; } //Enum for ASC and DESC
    public IList<T> Items { get; set; }
    public int Page { get; set; }
    public int PageSize { get; set; }
}

方法:

PagedModel<User> GetUsers(Expression<Func<T,bool>> predicate, int page, int pageSize, GridSortOptions sortOption);

问题:

  1. 此方法缺少哪些参数?
  2. PagedModel 缺少哪些属性?
  3. 如何实现该方法?

我想要什么:

  1. 分页
  2. 排序
  3. 过滤

【问题讨论】:

    标签: c# asp.net-mvc design-patterns


    【解决方案1】:

    我发现有时创建一个包含所有与您正在搜索的项目列表分开的属性的“Criteria”类很好。这样,您可以将其用作模型属性,该属性将自动绑定到您的搜索操作,将其传递给服务和存储库方法(而不是一堆单独的参数),如果需要,将其保留在会话中,具有强类型过滤器属性特定于您正在搜索的当前类型(即用户),具有用于保存通用分页或排序的超类型。

    类似

    public class UserCriteria
    {
        public GridSortOptions GridSortOptions { get; set; } //Enum for ASC and DESC
        public int Page { get; set; }
        public int PageSize { get; set; }
        public bool? IsActive { get; set; }
        public string UserName { get; set; }
    }
    

    【讨论】:

      【解决方案2】:

      我一直在使用 Telerik MVC 组件,它们是开源且免费的。我刚刚发现的最好的事情是,如果您使用IQueryable&lt;T&gt; 作为您的数据源,它会自动为您提供...分页、排序、过滤和分组(确保我遗漏了一些位)盒子!

      可能值得一看。

      【讨论】:

      • Telerik 的东西真的很棒。
      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 2013-06-28
      • 2019-04-30
      • 1970-01-01
      • 2020-09-08
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多