C#按LastID进行分页——与lambda形成链式

    public static class PageHelper
    {
        /// <summary>
        /// 按页码分页
        /// </summary>
        /// <param name="objects">要分页的数据集合</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">页大小</param>
        /// <returns></returns>
        public static object PageByIndex(this IEnumerable<object> objects, int pageIndex,int pageSize)
        {
            return objects.Skip(pageIndex * pageSize).Take(pageSize);
        }

        /// <summary>
        /// 获取当前项在列表中的位置
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="item"></param>
        /// <param name="property"></param>
        /// <returns></returns>
        public static int GetPageIndex<T>(object[] list, object item, string property = "ID")
        {
            PropertyInfo ptyIdInfo = typeof(T).GetProperty(property);
            var index = 0;
            for (int i = 0; i < list.Length; i++)
            {
                var objid = ptyIdInfo.GetValue(list[i], null);
                if (Equals(objid, item))
                {
                    index = i;
                    break;
                }
            }
            return index;
        }

        /// <summary>
        /// 按lastid分页
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objects">要分页的数据集合</param>
        /// <param name="item">分页项值</param>
        /// <param name="property">分页项</param>
        /// <param name="iswilful">分页项是最后一个还是任意中间一个</param>
        /// <param name="pageSize">页大小</param>
        /// <returns></returns>
        public static object PageByLastId<T>(this IEnumerable<object> objects, object item, bool iswilful= false,int pageSize=0, string property = "ID")
        {
            if(pageSize==0) pageSize = Int32.Parse(BaseHelper.GetValue("pageSize"));
            if (item==null||item.ToString()=="")
            {
                return objects.PageByIndex(0,pageSize);
            }
            var list = objects as object[] ?? objects.ToArray();
            var index = GetPageIndex<T>(list, item, property);
            if (iswilful)
            {
                return list.Skip(index + 1).Take(pageSize); //取任意ID后面pageSize条
            }
            else
            {
                if ((index + 1) % pageSize == 0)
                {
                    var pageIndex = index / pageSize + 1;
                    return PageByIndex(list, pageIndex,pageSize);
                }
                else
                {
                    return new List<T>();
                }
            }
        }
    }

使用:

db.Database.SqlQuery<ScheduleDTO>(string.Format(sql,prjId,taskGroupId,userId)).PageByLastId<ScheduleDTO>(lastid)
时间: 2024-10-14 18:30:47

C#按LastID进行分页——与lambda形成链式的相关文章

操作系统——存储管理:分区、分页、分段、请求式分页和虚拟内存

操作系统——存储管理:分区.分页.分段.请求式分页和虚拟内存 1. 综述 突然把这么多概念弄到一起,让人有点儿困惑.自己的一些理解: 分区式管理:最简单直观的方式,在内存中分配一个区,将整个进程放入这个区.缺点是会产生外碎片,即时间长了会在分区之间产生难以被利用的小空间. 分页式管理:将内存分成固定大小的页,分配若干页将整个进程载入.页面可以不连续是其重要优点,不会产生外碎片,更有效地利用了内存,不过会产生一些内碎片,即分配给进程的最后一个页往往不能正好用完,不过在页面大小不是很大的时候可以接受

ASP.NET EF(LINQ/Lambda查询)

EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动导入MVC程序集,因为默认.NET环境(GAC)中没有这个程序集 1 create database MyFirstEF 2 on primary 3 ( 4 name='MyFirstEF.mdf', 5 --修改为自己电脑上SQL DB路径 6 filename='E:\ProgramMSSQL

Java Lambda表达式入门[转]

原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示例程序 Examples.zip .原文日期: 2014年4月16日 翻译日期: 2014年4月27日翻译人员: 铁锚简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要

Android Stutio中使用java8的Lambda表达式

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51532028 本文出自:[openXu的博客] 目录: 为什么要使用Lambda表达式 让Android Stutio支持Lambda 函数式接口Functional interfaces Lambda表达式的目标类型以及匹配 Lambda表达式语法 1 基础语法和语法简化 2 Lambda表达式的词法作用域 3 变量捕获 ??Java 8的一个大亮点是引入Lambda表达式,使用它设计的

Other - 06 - Lambda学习笔记 - Lambda

Lambda 通过上篇我们基本可以看出来 Lambda 是一个行为非常类似匿名内部类的一个东西,而实际上它大部分时候都是在取代匿名内部类来实现更加简洁的语法. 可以看到这是一个简单的使用 Lambda 去代替 Comparator 匿名类来进行排序的例子. 首先第一是代码变的更加紧凑了,原先需要使用四行半的代码现在半行就搞定,但这不是最重要的,重要的是这种从四行半缩短到半行可以让我们的代码更加容易的进行链式操作. 可以看到如果仍然使用匿名类,那么这个代码就非常的难看了,但是使用 Lambda 就

Java Lambda表达式入门

原文链接: Start Using Java Lambda Expressions 下载示例程序 Examples.zip . 原文日期: 2014年4月26日 翻译日期: 2014年4月27日 翻译人员: 铁锚 简介 (译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.) Lambda表

java 8 中lambda表达式学习

转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-of-lambda-expressions-in-java8.html Lambda表达式的语法基本语法:(parameters) -> expression或(parameters) ->{ statements; } 下面是Java lambda表达式的简单例子: // 1. 不需要参数,返回值

C#Lambda表达式学习日记

Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用. 现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可以使用该方法. // 该方法唯一的参数是一个System.Predicate<T>类型的泛型委托 public List<T> FindAll(Predicate<T> match); // 该委托指向任意以类型参数作为唯一输入参数并返回bool的方法 public del

Lambda 表达式的演示样例-来源(MSDN)

本文演示怎样在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述.请參阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的具体信息,请參阅 Lambda 表达式语法. 本文内容 声明 Lambda 表达式 调用 Lambda 表达式 嵌套 Lambda 表达式 高阶 Lambda 函数 在函数中使用 Lambda 表达式 配合使用 Lambda 表达式和模板 处理异常 配合使用 Lambda 表达式和托管类型 声明 Lambda 表达式 演示样例 1