// using System; // using System.Collections.Generic; // using System.Linq; // using System.Linq.Expressions; // using System.Reflection; // using System.Threading.Tasks; // using Contracts.DTOs.Generic; // using Microsoft.EntityFrameworkCore; // namespace Commerce.Core.Utility; // public static class SortExt // { // public static IQueryable ApplySort(this IQueryable query, SortModel sortModel) // { // if (string.IsNullOrWhiteSpace(sortModel?.SortBy)) // return query; // // Get the property info // var propertyInfo = typeof(T).GetProperty( // sortModel.SortBy, // BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance // ); // if (propertyInfo == null) // throw new ArgumentException( // $"No property '{sortModel.SortBy}' on type '{typeof(T).Name}'" // ); // // Create x => x.PropertyName // var parameter = Expression.Parameter(typeof(T), "x"); // var property = Expression.Property(parameter, propertyInfo); // var lambda = Expression.Lambda(property, parameter); // // Call OrderBy or OrderByDescending dynamically // string methodName = sortModel.SortBy?.ToLower() == "desc" ? "OrderByDescending" : "OrderBy"; // var result = typeof(Queryable) // .GetMethods() // .First(m => m.Name == methodName && m.GetParameters().Length == 2) // .MakeGenericMethod(typeof(T), propertyInfo.PropertyType) // .Invoke(null, new object[] { query, lambda }); // return (IQueryable)result; // } // }