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

时间:2023-12-05 20:35:26
    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 = ;
for (int i = ; 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=, string property = "ID")
{
if(pageSize==) pageSize = Int32.Parse(BaseHelper.GetValue("pageSize"));
if (item==null||item.ToString()=="")
{
return objects.PageByIndex(,pageSize);
}
var list = objects as object[] ?? objects.ToArray();
var index = GetPageIndex<T>(list, item, property);
if (iswilful)
{
return list.Skip(index + ).Take(pageSize); //取任意ID后面pageSize条
}
else
{
if ((index + ) % pageSize == )
{
var pageIndex = index / pageSize + ;
return PageByIndex(list, pageIndex,pageSize);
}
else
{
return new List<T>();
}
}
}
}

使用:

db.Database.SqlQuery<ScheduleDTO>(string.Format(sql,prjId,taskGroupId,userId)).PageByLastId<ScheduleDTO>(lastid)