mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-11-08 15:53:22 -05:00
Backport pull request #15087 from jellyfin/release-10.11.z
Optimize WhereReferencedItemMultipleTypes filtering Original-merge: a5bc4524d8a882efa12a17b6251894322745be78 Merged-by: crobibero <cody@robibe.ro> Backported-by: Bond_009 <bond.009@outlook.com>
This commit is contained in:
parent
5deb69b23f
commit
adfa520057
@ -2053,7 +2053,7 @@ public sealed class BaseItemRepository
|
|||||||
|
|
||||||
if (filter.ExcludeArtistIds.Length > 0)
|
if (filter.ExcludeArtistIds.Length > 0)
|
||||||
{
|
{
|
||||||
baseQuery = baseQuery.WhereReferencedItem(context, ItemValueType.Artist, filter.ExcludeArtistIds, true);
|
baseQuery = baseQuery.WhereReferencedItemMultipleTypes(context, [ItemValueType.Artist, ItemValueType.AlbumArtist], filter.ExcludeArtistIds, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.GenreIds.Count > 0)
|
if (filter.GenreIds.Count > 0)
|
||||||
|
|||||||
@ -70,13 +70,14 @@ public static class JellyfinQueryHelperExtensions
|
|||||||
bool invert = false)
|
bool invert = false)
|
||||||
{
|
{
|
||||||
var itemFilter = OneOrManyExpressionBuilder<BaseItemEntity, Guid>(referenceIds, f => f.Id);
|
var itemFilter = OneOrManyExpressionBuilder<BaseItemEntity, Guid>(referenceIds, f => f.Id);
|
||||||
|
var typeFilter = OneOrManyExpressionBuilder<ItemValue, ItemValueType>(itemValueTypes, iv => iv.Type);
|
||||||
|
|
||||||
return baseQuery.Where(item =>
|
return baseQuery.Where(item =>
|
||||||
context.ItemValues
|
context.ItemValues
|
||||||
|
.Where(typeFilter)
|
||||||
.Join(context.ItemValuesMap, e => e.ItemValueId, e => e.ItemValueId, (itemVal, map) => new { itemVal, map })
|
.Join(context.ItemValuesMap, e => e.ItemValueId, e => e.ItemValueId, (itemVal, map) => new { itemVal, map })
|
||||||
.Any(val =>
|
.Any(val =>
|
||||||
itemValueTypes.Contains(val.itemVal.Type)
|
context.BaseItems.Where(itemFilter).Any(e => e.CleanName == val.itemVal.CleanValue)
|
||||||
&& context.BaseItems.Where(itemFilter).Any(e => e.CleanName == val.itemVal.CleanValue)
|
|
||||||
&& val.map.ItemId == item.Id) == EF.Constant(!invert));
|
&& val.map.ItemId == item.Id) == EF.Constant(!invert));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user