using DigitalData.Core.Abstraction.Application.Repository; using Microsoft.EntityFrameworkCore; using System.Linq.Expressions; namespace DigitalData.Core.Infrastructure; public sealed record ReadQuery : IReadQuery { private IQueryable _query; internal ReadQuery(IQueryable queryable) { _query = queryable; } public TEntity First() => _query.First(); public Task FirstAsync(CancellationToken cancellation = default) => _query.FirstAsync(cancellation); public TEntity? FirstOrDefault() => _query.FirstOrDefault(); public Task FirstOrDefaultAsync(CancellationToken cancellation = default) => _query.FirstOrDefaultAsync(cancellation); public TEntity Single() => _query.Single(); public Task SingleAsync(CancellationToken cancellation = default) => _query.SingleAsync(cancellation); public TEntity? SingleOrDefault() => _query.SingleOrDefault(); public Task SingleOrDefaultAsync(CancellationToken cancellation = default) => _query.SingleOrDefaultAsync(cancellation); public IEnumerable ToList() => _query.ToList(); public async Task> ToListAsync(CancellationToken cancellation = default) => await _query.ToListAsync(cancellation); public IReadQuery Where(Expression> expression) { _query = _query.Where(expression); return this; } }