using System; using System.Linq; using System.Linq.Expressions; namespace NzbDrone.Core.Datastore.Extensions { public static class PagingSpecExtensions { public static Expression> OrderByClause(this PagingSpec pagingSpec, Expression> defaultExpression = null) { try { return CreateExpression(pagingSpec.SortKey); } catch { if (defaultExpression == null) { return x => x; } return defaultExpression; } } public static int PagingOffset(this PagingSpec pagingSpec) { return (pagingSpec.Page - 1)*pagingSpec.PageSize; } public static Marr.Data.QGen.SortDirection ToSortDirection(this PagingSpec pagingSpec) { if (pagingSpec.SortDirection == SortDirection.Descending) return Marr.Data.QGen.SortDirection.Desc; return Marr.Data.QGen.SortDirection.Asc; } private static Expression> CreateExpression(string propertyName) { Type type = typeof(TModel); ParameterExpression parameterExpression = Expression.Parameter(type, "x"); Expression expressionBody = parameterExpression; var splitPropertyName = propertyName.Split('.').ToList(); foreach (var property in splitPropertyName) { expressionBody = Expression.Property(expressionBody, property); } expressionBody = Expression.Convert(expressionBody, typeof(object)); return Expression.Lambda>(expressionBody, parameterExpression); } } }