Change GetPeople PeopleBaseItemMap code to query

This commit is contained in:
Lampan-git 2025-03-05 16:59:31 +01:00
parent d28ee96f06
commit 4e3d7383f5

View File

@ -42,25 +42,23 @@ public class PeopleRepository(IDbContextFactory<JellyfinDbContext> dbProvider, I
// Include PeopleBaseItemMap // Include PeopleBaseItemMap
if (!filter.ItemId.IsEmpty()) if (!filter.ItemId.IsEmpty())
{ {
var people = dbQuery.ToArray(); var query = dbQuery
var peopleIds = people.Select(p => p.Id).ToArray(); .GroupJoin(
context.PeopleBaseItemMap.AsNoTracking().Where(m => m.ItemId == filter.ItemId),
person => person.Id,
mapping => mapping.PeopleId,
(person, mappings) => new { Person = person, Mapping = mappings.FirstOrDefault() });
var mappings = context.PeopleBaseItemMap return query
.AsNoTracking() .AsEnumerable()
.Where(m => peopleIds.Contains(m.PeopleId) && m.ItemId == filter.ItemId) .Select(p =>
.ToDictionary(m => m.PeopleId);
return people.Select(p =>
{
var personInfo = Map(p);
if (mappings.TryGetValue(p.Id, out var mapping))
{ {
personInfo.Role = mapping.Role; var personInfo = Map(p.Person);
personInfo.SortOrder = mapping.SortOrder; personInfo.Role = p.Mapping?.Role;
} personInfo.SortOrder = p.Mapping?.SortOrder;
return personInfo;
return personInfo; })
}).ToArray(); .ToArray();
} }
return dbQuery.AsEnumerable().Select(Map).ToArray(); return dbQuery.AsEnumerable().Select(Map).ToArray();