صفحه بندی پویا در Entity Framework
نویسنده: محمد رضا صفری
تاریخ: ۱۳۹۳/۰۱/۲۶ ۹:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
/// <summary>
/// صفحه بندی کوئری
/// </summary>
/// <param name="query">کوئری مورد نظر شما</param>
/// <param name="pageNum">شماره صفحه</param>
/// <param name="pageSize">سایز صفحه</param>
/// <param name="orderByProperty">ترتیب خواص</param>
/// <param name="isAscendingOrder">اگر برابر با <c>true</c> باشد صعودی است</param>
/// <param name="rowsCount">تعداد کل ردیف ها</param>
/// <returns></returns>
private static IQueryable<T> PagedResult<T, TResult>(IQueryable<T> query, int pageNum, int pageSize,
Expression<Func<T, TResult>> orderByProperty, bool isAscendingOrder, out int rowsCount)
{
if (pageSize <= 0) pageSize = 20;
//مجموع ردیفهای به دست آمده
rowsCount = query.Count();
// اگر شماره صفحه کوچکتر از 0 بود صفحه اول نشان داده شود
if (rowsCount <= pageSize || pageNum <= 0) pageNum = 1;
// محاسبه ردیف هایی که نسبت به سایز صفحه باید از آنها گذشت
int excludedRows = (pageNum - 1) * pageSize;
query = isAscendingOrder ? query.OrderBy(orderByProperty) : query.OrderByDescending(orderByProperty);
// ردشدن از ردیفهای اضافی و دریافت ردیفهای مورد نظر برای صفحه مربوطه
return query.Skip(excludedRows).Take(pageSize);
} var articles = (from article in Articles
where article.Author == "Abc"
select article);
int totalArticles;
var firstPageData = PagedResult(articles, 1, 20, article => article.PublishedDate, false, out totalArticles); var context = new AtricleEntityModel(); var query = context.ArticlesPagedResult(articles, <pageNumber>, 20, article => article.PublishedDate, false, out totalArticles);
Helper.PagedResult(t, 1, 10, o=>true, false, out i);
private static IQueryable<T> PagedResult<T, TResult>(IQueryable<T> query, int pageNum, int pageSize,
Expression<Func<T, TResult>> orderByProperty,
bool isAscendingOrder, out int rowsCount,
Expression<Func<T, bool>> whereClause = null)
{
if (pageSize <= 0) pageSize = 20;
//مجموع ردیفهای به دست آمده
rowsCount = query.Count();
// اگر شماره صفحه کوچکتر از 0 بود صفحه اول نشان داده شود
if (rowsCount <= pageSize || pageNum <= 0) pageNum = 1;
// محاسبه ردیف هایی که نسبت به سایز صفحه باید از آنها گذشت
int excludedRows = (pageNum - 1) * pageSize;
query = isAscendingOrder ? query.OrderBy(orderByProperty) : query.OrderByDescending(orderByProperty);
//جستجو را در صورت لزوم انجام میدهد
query = whereClause == null ? query : query.Where(whereClause);
// ردشدن از ردیفهای اضافی و دریافت ردیفهای مورد نظر برای صفحه مربوطه
return query.Skip(excludedRows).Take(pageSize);
} public static List<t_Prodcts> GetPaging(int currentPage, int pageSize, out int count,
Expression<Func<t_Prodcts, bool>> search = null)
{
using (var db = new asusIranDBConnection())
{
return PagedResult(db.t_Prodcts, currentPage, pageSize, o => true, false, out count, search).ToList();
}
}