public IQueryable <TEntity> CreateOrder(SeletorBase seletor, IQueryable <TEntity> query) { try { if (seletor.OrderBy != null) { query = query.OrderBy(y => 1); string[] fields = seletor.OrderBy.Split(','); foreach (string fieldWithOrder in fields) { string[] fieldParam = fieldWithOrder.Split(' '); OrderBy order = fieldParam.Length > 1 ? (OrderBy)Enum.Parse(typeof(OrderBy), fieldParam[1]) : seletor.OrderByOrder; string orderBy = "ThenBy"; if (order == OrderBy.DESC) { orderBy = "ThenByDescending"; } ParameterExpression x = Expression.Parameter(query.ElementType, "x"); LambdaExpression exp = Expression.Lambda(Expression.PropertyOrField(x, fieldParam[0].Trim()), x); query = (IQueryable <TEntity>)query.Provider.CreateQuery(Expression.Call(typeof(Queryable), orderBy, new Type[] { query.ElementType, exp.Body.Type }, query.Expression, exp)); } } } catch (Exception ex) { } return(query); }
public IQueryable <TEntity> CreateLimit(SeletorBase seletor, IQueryable <TEntity> query) { if (seletor.Pagina < 0) { seletor.Pagina = 1; } int skip = ((seletor.Pagina - 1) * seletor.RegistroPorPagina); int take = seletor.RegistroPorPagina; return(query.Skip(skip).Take(take)); }