using Core.Entities; namespace WebApp.Models; /// /// Extension methods for sorting teams with group teams (EventFormat.Team) appearing before individual teams (EventFormat.Individual). /// public static class TeamExtensions { /// /// Orders teams with group teams (EventFormat.Team) first, then individual teams (EventFormat.Individual). /// For use with EF Core IQueryable queries. /// /// The queryable collection of teams to sort. /// An ordered queryable with group teams first, then individual teams. public static IOrderedQueryable OrderByEventFormatFirst(this IQueryable teams) { return teams.OrderByDescending(t => t.Event.EventFormat == EventFormat.Team ? 1 : 0); } /// /// Orders teams with group teams (EventFormat.Team) first, then individual teams (EventFormat.Individual). /// For use with in-memory IEnumerable collections. /// /// The collection of teams to sort. /// An ordered enumerable with group teams first, then individual teams. public static IOrderedEnumerable OrderByEventFormatFirst(this IEnumerable teams) { return teams.OrderByDescending(t => t.Event.EventFormat == EventFormat.Team ? 1 : 0); } /// /// Orders teams with group teams first, then applies default secondary sorting: /// Event.Name (ascending), then Identifier (ascending with nulls last). /// /// The collection of teams to sort. /// An ordered enumerable with group teams first and default secondary sorting applied. public static IOrderedEnumerable OrderByEventFormatFirstWithDefaults(this IEnumerable teams) { return teams .OrderByEventFormatFirst() .ThenBy(t => t.Event.Name) .ThenBy(t => t.Identifier ?? ""); } }