aboutsummaryrefslogtreecommitdiff
path: root/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs
diff options
context:
space:
mode:
authorLogan Douglas <42654828+JadedRain@users.noreply.github.com>2025-10-31 13:06:17 -0600
committerGitHub <noreply@github.com>2025-10-31 13:06:17 -0600
commit490bf347cbdf8ec458996d09ba40651eb647b7b9 (patch)
tree1bdad774667bf5e69f3fe7397a27f631a5ca617a /src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs
parentfd6e48603bcf143a1bbc3b1bda26a8e1664f9379 (diff)
parent23929a3e709f4324d49271c02b0b047e1149e860 (diff)
Merge branch 'jellyfin:master' into master
Diffstat (limited to 'src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs')
-rw-r--r--src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs
index 4d5cfb8c9b..f386e882e2 100644
--- a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs
+++ b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs
@@ -54,6 +54,34 @@ 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);
+ var typeFilter = OneOrManyExpressionBuilder<ItemValue, ItemValueType>(itemValueTypes, iv => iv.Type);
+
+ return baseQuery.Where(item =>
+ context.ItemValues
+ .Where(typeFilter)
+ .Join(context.ItemValuesMap, e => e.ItemValueId, e => e.ItemValueId, (itemVal, map) => new { itemVal, map })
+ .Any(val =>
+ 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>