private IQueryable <TResource> FilterById <TResource>(string id, IResourceTypeRegistration resourceTypeRegistration, params Expression <Func <TResource, object> >[] includes) where TResource : class { var param = Expression.Parameter(typeof(TResource)); var filterByIdExpression = resourceTypeRegistration.GetFilterByIdExpression(param, id); var predicate = Expression.Lambda <Func <TResource, bool> >(filterByIdExpression, param); return(Filter(predicate, includes)); }
private IQueryable <TResource> FilterById <TResource>(string id, IResourceTypeRegistration resourceTypeRegistration) where TResource : class { var param = Expression.Parameter(typeof(TResource)); var filterByIdExpression = resourceTypeRegistration.GetFilterByIdExpression(param, id); var predicate = Expression.Lambda <Func <TResource, bool> >(filterByIdExpression, param); IQueryable <TResource> query = _dbContext.Set <TResource>(); return(query.Where(predicate)); }
/// <summary> /// Gets a record by ID /// </summary> protected async Task <TRecord> GetExistingRecordGeneric <TRecord>(IResourceTypeRegistration registration, string id, ResourceTypeRelationship[] relationshipsToInclude, CancellationToken cancellationToken) where TRecord : class { var param = Expression.Parameter(registration.Type); var filterExpression = registration.GetFilterByIdExpression(param, id); var lambda = Expression.Lambda <Func <TRecord, bool> >(filterExpression, param); var query = _dbContext.Set <TRecord>().AsQueryable() .Where(lambda); if (relationshipsToInclude != null) { query = relationshipsToInclude.Aggregate(query, (current, resourceTypeRelationship) => current.Include(resourceTypeRelationship.Property.Name)); } return(await query.FirstOrDefaultAsync(cancellationToken)); }