zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/xuhang/p/5204985.html
Copyright © 2011-2022 走看看