示例#1
0
        /// <summary>
        /// OrderBy extension
        /// </summary>
        /// <typeparam name="T">Entity type</typeparam>
        /// <param name="source">Source collection</param>
        /// <param name="sortField">Sorting field by</param>
        /// <param name="orderRule">Order rule</param>
        /// <returns>Sorted iqueryable</returns>
        public static IQueryable <T> OrderBy <T>(this IQueryable <T> source, SortFields sortField, OrderRule orderRule)
        {
            var type           = typeof(T);
            var property       = type.GetProperty(sortField.ToString());
            var parameter      = Expression.Parameter(type, "p");
            var propertyAccess = Expression.MakeMemberAccess(parameter, property);
            var orderByExp     = Expression.Lambda(propertyAccess, parameter);
            var resultExp      = Expression.Call(
                typeof(Queryable),
                orderRule == OrderRule.Asc ? "OrderBy" : "OrderByDescending",
                new[] { type, property.PropertyType },
                source.Expression,
                Expression.Quote(orderByExp));

            return(source.Provider.CreateQuery <T>(resultExp));
        }