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)