首页 > 编程 > .NET > 正文

ASP.NET MVC5网站开发之用户添加和浏览2(七)

2024-07-10 12:46:48
字体:
来源:转载
供稿:网友

一、数据存储层

1、查找分页列表

在写用户列表时遇到了问题,考虑到用户可能会较多的情况需要分页,在数据存储层写的方法是public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)。

主要问题就在红色的order这儿,这个参数不好传递,比如:如果是已ID来排序哪TKey类型是int,如果以注册时间来排序哪TKey类型就是datetime。如果我在业务逻辑层写一个函数可以支持选择排序类型,那么我没有办法声明一个变量既可以存储TKey为int的值,又可以存储datetime的值,那么排序就要写成下面这个样子,感觉不舒服。

//排序      switch(order)      {        case 0://ID升序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, true).ToList();          break;        case 1://ID降序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, false).ToList();          break;        case 2://注册时间降序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.RegTime, true).ToList();          break;        case 3://注册时间升序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.RegTime, false).ToList();          break;        case 4://最后登录时间升序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.LastLoginTime, true).ToList();          break;        case 5://最后登录时间降序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.LastLoginTime, false).ToList();          break;        default://ID降序          _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, false).ToList();          break;      }

后来将TKey设为dynamic类型,不论Expression<Func<T, dynamic>> order = u => u.UserID  或者u => u.RegTime都可以编译通过,但是一运行就会出错。

前几天没写博客一直在考虑这个问题,后来还是换成用字符串的方式来动态排序。 步骤如下:

Ninesky.DataLibrary[右键]->添加->类,输入类名OrderParam

namespace Ninesky.DataLibrary{  /// <summary>  /// 排序参数  /// </summary>  public class OrderParam  {    /// <summary>    /// 属性名    /// </summary>    public string PropertyName { get; set; }    /// <summary>    /// 排序方式    /// </summary>    public OrderMethod Method { get; set; }  }  /// <summary>  /// 排序方式  /// </summary>  public enum OrderMethod  {    /// <summary>    /// 正序    /// </summary>    ASC,    /// <summary>    /// 倒序    /// </summary>    DESC  }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表