diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 619863fd53..0e99968737 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -228,12 +228,14 @@ public sealed class BaseItemRepository( .Include(e => e.Images) .Include(e => e.LockedFields); dbQuery = TranslateQuery(dbQuery, context, filter); - // .DistinctBy(e => e.Id); + // .DistinctBy(e => e.Id); if (filter.EnableTotalRecordCount) { result.TotalRecordCount = dbQuery.Count(); } + dbQuery = ApplyOrder(dbQuery, filter); + if (filter.Limit.HasValue || filter.StartIndex.HasValue) { var offset = filter.StartIndex ?? 0; @@ -267,6 +269,7 @@ public sealed class BaseItemRepository( .Include(e => e.Images) .Include(e => e.LockedFields); dbQuery = TranslateQuery(dbQuery, context, filter); + dbQuery = ApplyOrder(dbQuery, filter); if (filter.Limit.HasValue || filter.StartIndex.HasValue) { var offset = filter.StartIndex ?? 0; @@ -2110,19 +2113,35 @@ public sealed class BaseItemRepository( return query; } - foreach (var item in orderBy) + IOrderedQueryable? orderedQuery = null; + + var firstOrdering = orderBy.FirstOrDefault(); + if (firstOrdering != default) + { + var expression = MapOrderByField(firstOrdering.OrderBy, filter); + if (firstOrdering.SortOrder == SortOrder.Ascending) + { + orderedQuery = query.OrderBy(expression); + } + else + { + orderedQuery = query.OrderByDescending(expression); + } + } + + foreach (var item in orderBy.Skip(1)) { var expression = MapOrderByField(item.OrderBy, filter); if (item.SortOrder == SortOrder.Ascending) { - query = query.OrderBy(expression); + orderedQuery = orderedQuery!.ThenBy(expression); } else { - query = query.OrderByDescending(expression); + orderedQuery = orderedQuery!.ThenByDescending(expression); } } - return query; + return orderedQuery ?? query; } }