Advertisement
Guest User

Multiple Sort Expression

a guest
Jan 31st, 2019
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.00 KB | None | 0 0
  1. public static IQueryable<T> DataTablesSort<T>(this IQueryable<T> query, IEnumerable<(string column, string direction)> sortExpressions)
  2.         {
  3.             ParameterExpression param = Expression.Parameter(typeof(T));
  4.             for (int i = 0; i < sortExpressions.Count(); i++)
  5.             {
  6.                 var index = i;
  7.                 MemberExpression prop = Expression.PropertyOrField(param, sortExpressions.ElementAt(index).column);
  8.                 LambdaExpression sort = Expression.Lambda(prop, param);
  9.  
  10.                 var functionName = index == 0 ? "OrderBy" : "ThenBy";
  11.                 functionName = sortExpressions.ElementAt(index).direction == "desc" ? functionName + "Descending" : functionName;
  12.  
  13.                 MethodCallExpression resultExp = Expression.Call(typeof(Queryable), functionName, new Type[] { typeof(T), prop.Type }, query.Expression, Expression.Quote(sort));
  14.  
  15.                 query = query.Provider.CreateQuery<T>(resultExp);
  16.             }
  17.  
  18.             return query;
  19.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement