using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using PARR.Core.Repositories.Interfaces.Unit; using PARR.DAL.Context; using PARR.DAL.Repositories.Base; namespace PARR.DAL.Repositories.Unit { internal class UnitRepository : BaseRepository, IUnitRepository { public UnitRepository(DataContext dataContext, ILogger logger) : base(logger, dataContext) { } public IQueryable GetWithIncludes() { return Get() .Include(t => t.UnitValues) .ThenInclude(t => t.Field) .Include(t => t.UnitValues) .ThenInclude(t => t.Value); } public IQueryable GetUnitByFieldAndValue(IQueryable query, Guid fieldId, string valueMask, bool isInverse = false) { //TODO: вынесено из UnitFilterService if (isInverse) { query = query.Where(u => !u.UnitValues.Any(v => v.FieldId == fieldId && EF.Functions.ILike(v.Value.Value, valueMask))); } else { query = query.Where(u => u.UnitValues.Any(v => v.FieldId == fieldId && EF.Functions.ILike(v.Value.Value, valueMask))); } return query; } public IQueryable GetInitialUnitIds(string dbValueMask) { //TODO: вынесено из UnitFilterService //var initialUnitIds = await unitService.Get().AsNoTracking() //.Where(unit => EF.Functions.ILike(unit.Name, dbValueMask)) //.Select(u => u.Id) //.ToListAsync(cancellationToken); return Get().AsNoTracking() .Where(unit => EF.Functions.ILike(unit.Name, dbValueMask)) .Select(u => u.Id); } } }