in src/Epam.GraphQL/Extensions/ExpressionExtensions.cs [533:559]
protected override Expression VisitMethodCall(MethodCallExpression node)
{
if (node.Method.IsGenericMethod && node.Arguments.Count >= 2)
{
var method = node.Method.GetGenericMethodDefinition();
var expr = node.Arguments[1].RemoveQuote();
if (method == CachedReflectionInfo.ForQueryable.GenericOrderBy || method == CachedReflectionInfo.ForQueryable.GenericOrderByWithComparer)
{
return AddSorter(node, expr, SortDirection.Asc, true);
}
else if (method == CachedReflectionInfo.ForQueryable.GenericOrderByDescending || method == CachedReflectionInfo.ForQueryable.GenericOrderByDescendingWithComparer)
{
return AddSorter(node, expr, SortDirection.Desc, true);
}
else if (method == CachedReflectionInfo.ForQueryable.GenericThenBy || method == CachedReflectionInfo.ForQueryable.GenericThenByWithComparer)
{
return AddSorter(node, expr, SortDirection.Asc, false);
}
else if (method == CachedReflectionInfo.ForQueryable.GenericThenByDescending || method == CachedReflectionInfo.ForQueryable.GenericThenByDescendingWithComparer)
{
return AddSorter(node, expr, SortDirection.Desc, false);
}
}
throw new ArgumentException($"Expression should not contain method calls except OrderBy, OrderByDescending, ThenBy and ThenByDescending. Call of {node.Method.Name} method was found.");
}