using Harmonia.Core.Models; using System.ComponentModel; using System.Reflection; namespace Harmonia.Core.Extensions; public static class EnumerableExtensions { public static IOrderedEnumerable SortBy(this IEnumerable source, SortOption[] sortOptions) { IOrderedEnumerable orderedQuery = source.OrderBy(x => 0); Type type = typeof(T); foreach (SortOption sortOption in sortOptions) { PropertyInfo? property = type.GetProperty(sortOption.FieldName); if (property == null) continue; switch (sortOption.Direction) { case ListSortDirection.Ascending: orderedQuery = orderedQuery.ThenBy(x => property.GetValue(x)); break; case ListSortDirection.Descending: orderedQuery = orderedQuery.ThenByDescending(x => property.GetValue(x)); break; } } return orderedQuery; } }