using System; using System.Linq; using System.Linq.Expressions; namespace NzbDrone.Core.Datastore { public static class PagingSpecExtensions { public static Expression> OrderByClause(this PagingSpec pagingSpec) { return CreateExpression(pagingSpec.SortKey); } 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); } } }