diff options
| author | JPVenson <github@jpb.email> | 2024-11-11 06:21:43 +0000 |
|---|---|---|
| committer | JPVenson <github@jpb.email> | 2024-11-11 06:21:43 +0000 |
| commit | c6e67edd8696351154d8c1bd0cabd5deb518873f (patch) | |
| tree | b87af90ae86b1c5b4218d3b62e752924bbd03cd5 /Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | |
| parent | fb48d0790f4b9be762443d239faaf77057713a51 (diff) | |
Fixed ItemSorting
Diffstat (limited to 'Jellyfin.Server.Implementations/Item/BaseItemRepository.cs')
| -rw-r--r-- | Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 619863fd5..0e9996873 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<BaseItemEntity>? 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; } } |
