avoid correlated item value name queries

This commit is contained in:
Felix Förtsch
2026-09-02 11:33:54 +02:00
parent 5adafb446f
commit c3a7de54f3
2 changed files with 54 additions and 8 deletions
@@ -121,20 +121,22 @@ public sealed partial class BaseItemRepository
{
using var context = _dbProvider.CreateDbContext();
var query = context.ItemValuesMap
.AsNoTracking()
.Where(e => itemValueTypes.Any(w => w == e.ItemValue.Type));
var maps = context.ItemValuesMap.AsNoTracking();
if (withItemTypes.Count > 0)
{
query = query.Where(e => withItemTypes.Contains(e.Item.Type));
maps = maps.Where(e => withItemTypes.Contains(e.Item.Type));
}
if (excludeItemTypes.Count > 0)
{
query = query.Where(e => !excludeItemTypes.Contains(e.Item.Type));
maps = maps.Where(e => !excludeItemTypes.Contains(e.Item.Type));
}
return query.Select(e => e.ItemValue)
return context.ItemValues
.AsNoTracking()
.WhereOneOrMany(itemValueTypes, e => e.Type)
.Where(e => maps.Any(m => m.ItemValueId == e.ItemValueId))
.Select(e => new { e.CleanValue, e.Value })
.GroupBy(e => e.CleanValue)
.Select(g => g.Min(v => v.Value)!)
.ToArray();