using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; using MongoDbGenericRepository.Models; namespace MongoDbGenericRepository.DataAccess.Read { public partial class MongoDbReader { /// public virtual async Task ProjectOneAsync( Expression> filter, Expression> projection, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await HandlePartitioned(partitionKey) .Find(filter) .Project(projection) .FirstOrDefaultAsync(cancellationToken); } /// public virtual async Task> ProjectManyAsync( Expression> filter, Expression> projection, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await HandlePartitioned(partitionKey).Find(filter) .Project(projection) .ToListAsync(cancellationToken); } /// public virtual TProjection ProjectOne( Expression> filter, Expression> projection, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return HandlePartitioned(partitionKey).Find(filter) .Project(projection) .FirstOrDefault(cancellationToken); } /// public virtual List ProjectMany( Expression> filter, Expression> projection, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return HandlePartitioned(partitionKey).Find(filter) .Project(projection) .ToList(cancellationToken); } } }