diff options
| author | theguymadmax <theguymadmax@proton.me> | 2025-10-13 10:09:09 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-13 09:09:09 -0600 |
| commit | 794e1361d79374df7a07dcb9092eb1d981a9e80b (patch) | |
| tree | 83b9c7346b64e527c54b65d9c887d679e7230c75 /src | |
| parent | 27c9c9c0ed2406162028bff5fb1ab74cef68d8e4 (diff) | |
Fix contributing artist query (#14991)
Diffstat (limited to 'src')
| -rw-r--r-- | src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs | 27 |
1 files changed, 27 insertions, 0 deletions
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 @@ -54,6 +54,33 @@ public static class JellyfinQueryHelperExtensions } /// <summary> + /// Builds a query that checks referenced ItemValues for a cross BaseItem lookup. + /// </summary> + /// <param name="baseQuery">The source query.</param> + /// <param name="context">The database context.</param> + /// <param name="itemValueTypes">The type of item value to reference.</param> + /// <param name="referenceIds">The list of BaseItem ids to check matches.</param> + /// <param name="invert">If set an exclusion check is performed instead.</param> + /// <returns>A Query.</returns> + public static IQueryable<BaseItemEntity> WhereReferencedItemMultipleTypes( + this IQueryable<BaseItemEntity> baseQuery, + JellyfinDbContext context, + IList<ItemValueType> itemValueTypes, + IList<Guid> referenceIds, + bool invert = false) + { + var itemFilter = OneOrManyExpressionBuilder<BaseItemEntity, Guid>(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)); + } + + /// <summary> /// Builds a query expression that checks referenced ItemValues for a cross BaseItem lookup. /// </summary> /// <param name="context">The database context.</param> |
