aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLampan-git <22211983+Lampan-git@users.noreply.github.com>2025-03-05 16:59:31 +0100
committerLampan-git <22211983+Lampan-git@users.noreply.github.com>2025-03-05 16:59:31 +0100
commit4e3d7383f5cb85eb408f9d026b6da1986925df17 (patch)
treeb34062a1ea918da30e0c58c7ad92dd24bd7a4209
parentd28ee96f06f57483c24f5cfcb14152c6b79a9c7d (diff)
Change GetPeople PeopleBaseItemMap code to query
-rw-r--r--Jellyfin.Server.Implementations/Item/PeopleRepository.cs34
1 files changed, 16 insertions, 18 deletions
diff --git a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
index 77b00a41a..cca25de73 100644
--- a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
@@ -42,25 +42,23 @@ public class PeopleRepository(IDbContextFactory<JellyfinDbContext> dbProvider, I
// Include PeopleBaseItemMap
if (!filter.ItemId.IsEmpty())
{
- var people = dbQuery.ToArray();
- var peopleIds = people.Select(p => p.Id).ToArray();
-
- var mappings = context.PeopleBaseItemMap
- .AsNoTracking()
- .Where(m => peopleIds.Contains(m.PeopleId) && m.ItemId == filter.ItemId)
- .ToDictionary(m => m.PeopleId);
-
- return people.Select(p =>
- {
- var personInfo = Map(p);
- if (mappings.TryGetValue(p.Id, out var mapping))
+ var query = dbQuery
+ .GroupJoin(
+ context.PeopleBaseItemMap.AsNoTracking().Where(m => m.ItemId == filter.ItemId),
+ person => person.Id,
+ mapping => mapping.PeopleId,
+ (person, mappings) => new { Person = person, Mapping = mappings.FirstOrDefault() });
+
+ return query
+ .AsEnumerable()
+ .Select(p =>
{
- personInfo.Role = mapping.Role;
- personInfo.SortOrder = mapping.SortOrder;
- }
-
- return personInfo;
- }).ToArray();
+ var personInfo = Map(p.Person);
+ personInfo.Role = p.Mapping?.Role;
+ personInfo.SortOrder = p.Mapping?.SortOrder;
+ return personInfo;
+ })
+ .ToArray();
}
return dbQuery.AsEnumerable().Select(Map).ToArray();