From 794e1361d79374df7a07dcb9092eb1d981a9e80b Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Mon, 13 Oct 2025 10:09:09 -0500 Subject: Fix contributing artist query (#14991) --- .../JellyfinQueryHelperExtensions.cs | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs index 4d5cfb8c9..8cb483f49 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs @@ -53,6 +53,33 @@ public static class JellyfinQueryHelperExtensions return baseQuery.Where(ReferencedItemFilterExpressionBuilder(context, itemValueType, referenceIds, invert)); } + /// + /// Builds a query that checks referenced ItemValues for a cross BaseItem lookup. + /// + /// The source query. + /// The database context. + /// The type of item value to reference. + /// The list of BaseItem ids to check matches. + /// If set an exclusion check is performed instead. + /// A Query. + public static IQueryable WhereReferencedItemMultipleTypes( + this IQueryable baseQuery, + JellyfinDbContext context, + IList itemValueTypes, + IList referenceIds, + bool invert = false) + { + var itemFilter = OneOrManyExpressionBuilder(referenceIds, f => f.Id); + + return baseQuery.Where(item => + context.ItemValues + .Join(context.ItemValuesMap, e => e.ItemValueId, e => e.ItemValueId, (itemVal, map) => new { itemVal, map }) + .Any(val => + itemValueTypes.Contains(val.itemVal.Type) + && context.BaseItems.Where(itemFilter).Any(e => e.CleanName == val.itemVal.CleanValue) + && val.map.ItemId == item.Id) == EF.Constant(!invert)); + } + /// /// Builds a query expression that checks referenced ItemValues for a cross BaseItem lookup. /// -- cgit v1.2.3