zoukankan      html  css  js  c++  java
  • MVC个人认为的终极分页

     //传入要查询的字段,查询条件(例如根据姓名查看数据的数据筛选),按照什么排序,页码,信息条数
            //T:要操作的类型
            //Tkey:根据什么类型来排,ID的话返回的是int类型,但是name的话又会返回string类型,不确定的情况下,就使用了tkey让用户自己确认返回的类型 GetPageList<T, Tkey>这个tkey就是Expression<Func<T, Tkey>>这个tkey
            //Skip:跳过多少条
            //Take:获得多少条
            //Total:返回的信息总数
            //isAsc:用户指定升降序
            //使用Expression是因为这个方法的重载属于IQueryable方式
            //这样的查询分页较为灵活,不因为类型而受限,你可传入一个学生类、一个教师类,或者一个其他类,之后查询的也是相关类的内容并且分页
            //Expression<Func<T, dynamic>>这里传入的是一个student类,返回的如果是T的话就只能得到student里面所有的属性。但是如果写的是dynamic,就会是运行时返回一个指定列 的查询
            public static List<dynamic> GetPageList<T, Tkey>(Expression<Func<T, dynamic>> select1, Expression<Func<T, bool>> where, Expression<Func<T, Tkey>> order, int pageSize, int pageIndex, out int total, bool isAsc) where T : class
            {
                //Ef空间
                DBTestEntities context = new DBTestEntities();
                total = context.Set<T>().Where(where).Count();
                var result = context.Set<T>().Where(where);
                //升降序判断
                if (isAsc)
                {
                    result = result.OrderBy(order);
                }
                else
                {
                    result = result.OrderByDescending(order);
                }
                //Tolist:可以避免linq的延时加载
                return result.Skip((pageIndex - 1) * pageSize).Take(pageSize).Select(select1).ToList();
            }

    调用的时候在委托上使用lambda表达式,例如这样调用

         int aa = 0;
                var list = PageList.GetPageList<Info, int>(e => e, s => s.Id < 10000, o => o.Id, 10, 1, out aa, true);
                foreach (Info item in list)
                {
                    Console.WriteLine("total:" + aa);
                }

     最后绑定一下数据集到某个控件表单上就OK啦

  • 相关阅读:
    Enterprise Library 2.0 Hands On Lab 翻译(9):缓存应用程序块(一)
    Enterprise Library 2.0 Hands On Lab 翻译(5):日志应用程序块(二)
    提供多单词建议的自定义AutoCompleteExtender
    什么是 axios
    Consul是一个分布式高可用的系统
    全栈开发工程师
    XPath路径表达式
    9 个带你阅读源码的开源项目
    前端跨域解决方案
    [WCFDiscovery]让服务自动发送上/下线通知[原理篇]
  • 原文地址:https://www.cnblogs.com/llcdbk/p/4157289.html
Copyright © 2011-2022 走看看