Files
2026-03-17 09:53:09 -05:00

57 lines
2.3 KiB
C#

using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace LCU.API.Internal.Operations.IncentiveApiLib.Extensions;
public static class EntityFrameworkExtensions
{
public static IOrderedQueryable OrderBy<TSource>(this IQueryable query, string propertyName)
{
var entityType = typeof(TSource);
var propertyInfo = entityType.GetProperty(propertyName);
ParameterExpression arg = Expression.Parameter(entityType, "x");
MemberExpression property = Expression.Property(arg, propertyName);
var selector = Expression.Lambda(property, new ParameterExpression[] { arg });
var enumarableType = typeof(System.Linq.Queryable);
var method = enumarableType.GetMethods()
.Where(m => m.Name == "OrderBy" && m.IsGenericMethodDefinition)
.Where(m =>
{
var parameters = m.GetParameters().ToList();
return parameters.Count == 2;
}).Single();
MethodInfo genericMethod = method.MakeGenericMethod(entityType, propertyInfo.PropertyType);
var newQuery = (IOrderedQueryable)genericMethod.Invoke(genericMethod, new object[] { query, selector });
return newQuery;
}
public static IOrderedQueryable OrderByDescending<TSource>(this IQueryable query, string propertyName)
{
var entityType = typeof(TSource);
var propertyInfo = entityType.GetProperty(propertyName);
ParameterExpression arg = Expression.Parameter(entityType, "x");
MemberExpression property = Expression.Property(arg, propertyName);
var selector = Expression.Lambda(property, new ParameterExpression[] { arg });
var enumarableType = typeof(System.Linq.Queryable);
var method = enumarableType.GetMethods()
.Where(m => m.Name == "OrderByDescending" && m.IsGenericMethodDefinition)
.Where(m =>
{
var parameters = m.GetParameters().ToList();
return parameters.Count == 2;
}).Single();
MethodInfo genericMethod = method.MakeGenericMethod(entityType, propertyInfo.PropertyType);
var newQuery = (IOrderedQueryable)genericMethod.Invoke(genericMethod, new object[] { query, selector });
return newQuery;
}
}