From 45d51568e7822f95e7fb0d76a24dec379eec81fe Mon Sep 17 00:00:00 2001 From: Cody Robibero Date: Sun, 14 Dec 2025 11:32:19 -0700 Subject: [PATCH] perf --- .../Item/BaseItemRepository.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 5043b0d94d..44d03da25e 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -442,12 +442,17 @@ public sealed class BaseItemRepository private IReadOnlyList GetEntities(IQueryable dbQuery, JellyfinDbContext context, InternalItemsQuery filter) { - var items = dbQuery.AsEnumerable().Where(e => e is not null).ToDictionary(e => e.Id, e => e); + var items = dbQuery.Where(e => e != null).ToDictionary(e => e.Id, e => e); var itemIds = items.Keys.ToArray(); + if (itemIds.Length == 0) + { + return []; + } + if (filter.TrailerTypes.Length > 0 || filter.IncludeItemTypes.Contains(BaseItemKind.Trailer)) { - var values = context.BaseItemTrailerTypes.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId); + var values = context.BaseItemTrailerTypes.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray(); foreach (var value in values) { if (items.TryGetValue(value.Key, out var item)) @@ -459,7 +464,7 @@ public sealed class BaseItemRepository if (filter.DtoOptions.ContainsField(ItemFields.ProviderIds)) { - var values = context.BaseItemProviders.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId); + var values = context.BaseItemProviders.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray(); foreach (var value in values) { if (items.TryGetValue(value.Key, out var item)) @@ -471,7 +476,7 @@ public sealed class BaseItemRepository if (filter.DtoOptions.ContainsField(ItemFields.Settings)) { - var values = context.BaseItemMetadataFields.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId); + var values = context.BaseItemMetadataFields.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray(); foreach (var value in values) { if (items.TryGetValue(value.Key, out var item)) @@ -483,7 +488,7 @@ public sealed class BaseItemRepository if (filter.DtoOptions.EnableImages) { - var values = context.BaseItemImageInfos.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId); + var values = context.BaseItemImageInfos.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray(); foreach (var value in values) { if (items.TryGetValue(value.Key, out var item)) @@ -495,7 +500,7 @@ public sealed class BaseItemRepository if (filter.DtoOptions.EnableUserData) { - var values = context.UserData.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId); + var values = context.UserData.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray(); foreach (var value in values) { if (items.TryGetValue(value.Key, out var item))