diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index f7e45d20..34daa52a 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -31,8 +31,11 @@ namespace Kyoo.Controllers Key = key; Descendant = descendant; - if (!(Key.Body is MemberExpression)) - throw new ArgumentException("The given sort key is not valid."); + if (Key.Body is MemberExpression || + Key.Body.NodeType == ExpressionType.Convert && ((UnaryExpression)Key.Body).Operand is MemberExpression) + return; + + throw new ArgumentException("The given sort key is not valid."); } public Sort(string sortBy) @@ -48,12 +51,16 @@ namespace Kyoo.Controllers string order = sortBy.Contains(':') ? sortBy.Substring(sortBy.IndexOf(':') + 1) : null; ParameterExpression param = Expression.Parameter(typeof(T), "x"); - Key = Expression.Lambda>(Expression.Property(param, key), param); + MemberExpression property = Expression.Property(param, key); + Key = property.Type.IsValueType + ? Expression.Lambda>(Expression.Convert(property, typeof(object)), param) + : Expression.Lambda>(property, param); + Descendant = order switch { "desc" => true, "asc" => false, - "" => false, + null => false, _ => throw new ArgumentException($"The sort order, if set, should be :asc or :desc but it was :{order}.") }; }