You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

75 lines
2.1 KiB

using Serilog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
namespace Wood.Util
{
public class PagedResult<T>
{
public List<T> Items { get; set; }
public int TotalItems { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
public int TotalPages => (int)Math.Ceiling(TotalItems / (double)PageSize);
public bool HasPreviousPage => PageNumber > 1;
public bool HasNextPage => PageNumber < TotalPages;
public PagedResult()
{
Items = new List<T>();
}
}
public static class QueryableExtensions
{
public static PagedResult<T> ToPagedResult<T>(this IQueryable<T> query, int pageNumber, int pageSize)
{
var result = new PagedResult<T>
{
PageNumber = pageNumber,
PageSize = pageSize,
TotalItems = query.Count()
};
result.Items = query
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
return result;
}
public static IQueryable<T> ApplySorting<T>(this IQueryable<T> query, string sortField, string sortDirection)
{
if (string.IsNullOrEmpty(sortField))
return query;
var parameter = Expression.Parameter(typeof(T), "x");
var property = Expression.Property(parameter, sortField);
var lambda = Expression.Lambda(property, parameter);
string methodName = sortDirection?.ToLower() == "desc" ? "OrderByDescending" : "OrderBy";
var resultExpression = Expression.Call(
typeof(Queryable),
methodName,
new[] { typeof(T), property.Type },
query.Expression,
Expression.Quote(lambda));
return query.Provider.CreateQuery<T>(resultExpression);
}
}
}