Я хочу создать общий c метод в generi c классе потребителя репозитория.
Вот мой общий c метод в generi c классе репозитория:
public class CosmosDBRepository<T> : ICosmosDBRepository<T> where T : class
{
public async Task<IEnumerable<T>> GetItemsAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> orderByDesc, int takeCount = -1)
{
var criteria = _container.GetItemLinqQueryable<T>(true)
.Where(predicate)
.OrderByDescending(orderByDesc)
.ToFeedIterator();
var query = criteria;
var results = new List<T>();
while (query.HasMoreResults)
{
if (takeCount > -1 && results.Count >= takeCount) break;
results.AddRange(await query.ReadNextAsync());
}
return results;
}
}
Generi c Класс потребителя репозитория:
public class SubscriptionRepository : CosmosDBRepository<Subscription>, ISubscriptionRepository
{
public SubscriptionRepository(
ICosmosDBClient client
) : base(client)
{
}
public async Task<List<T>> GetSubscriptions<T, TE>(
TE eventItem,
params SubscriptionAction[] subscriptionAction)
where T : Subscription
where TE : Event
{
Expression<Func<T, bool>> predicate = (x) => x.EventType == eventItem.EventType
&& x.IsActive;
predicate = predicate.And(x => subscriptionAction.Contains(x.Action));
if (!string.IsNullOrEmpty(eventItem.PayerNumber))
{
predicate = predicate.And(x => x.PayerNumber == eventItem.PayerNumber);
}
else if (!string.IsNullOrEmpty(eventItem.AccountNumber))
{
predicate = predicate.And(x => x.AccountNumber == eventItem.AccountNumber);
}
var result = await GetItemsAsync(predicate, o => o.PayerNumber);
return result.ToList();
}
}
Теперь я хочу создать generi c метод GetSubscriptions
в SubscriptionRepository
классе.
Не могли бы вы подсказать, как я может достичь этого?
В настоящее время я получаю следующую ошибку времени компиляции:
не удается преобразовать из 'System.Linq.Expression > 'в' System.Linq.Expression.Expression > '