Пример #1
0
        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));
        }
Пример #2
0
        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));
        }