コード例 #1
0
        /// <summary>
        /// 获取分页信息,不使用Mapper
        /// </summary>
        /// <typeparam name="TEntityOrView"></typeparam>
        /// <param name="query"></param>
        /// <param name="pagedInputDto"></param>
        /// <returns></returns>
        public static async Task <MyPagedResult <TEntityOrView> > GetPageEntityOrViewAsync <TEntityOrView>(this IQueryable <TEntityOrView> query, PagedInputDto pagedInputDto) where TEntityOrView : class
        {
            query = EntityFrameworkQueryableExtensions.AsNoTracking <TEntityOrView>(query);
            //排序
            if (!string.IsNullOrEmpty(pagedInputDto.Order))
            {
                List <string> strList = pagedInputDto.Order.Split(new char[1]
                {
                    ','
                }).ToList();
                for (int i = 0; i < strList.Count; i++)
                {
                    query = ((i != 0) ? ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.ThenByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())) : ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.OrderByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())));
                }
            }
            if (pagedInputDto.Filter != null)
            {
                string   text  = pagedInputDto.Filter.ToWhere();
                object[] array = pagedInputDto.Filter.paramValues.ToArray();
                query = DynamicQueryable.Where <TEntityOrView>(query, text, array);
            }
            IQueryable <TEntityOrView> queryable = query.Skip(pagedInputDto.SkipCount).Take(pagedInputDto.PageSize);

            List <TEntityOrView> dataList = await EntityFrameworkQueryableExtensions.ToListAsync <TEntityOrView>(queryable, default(CancellationToken));

            MyPagedResult <TEntityOrView> obj = new MyPagedResult <TEntityOrView>();

            obj.PageSize  = pagedInputDto.PageSize;
            obj.PageIndex = pagedInputDto.PageIndex;
            obj.DataList  = dataList;
            obj.RowCount  = query.Count();
            return(obj);
        }
コード例 #2
0
ファイル: LeadRepository.cs プロジェクト: vipdrv/vipdrv-core
        public async Task NullifyRouteRelation(Func <IQueryable <Lead>, IQueryable <Lead> > queryBuilder)
        {
            bool createdNew = false;

            try
            {
                DbContext   context = DbContextManager.BuildOrCurrentContext(out createdNew);
                List <Lead> leads   = EntityFrameworkQueryableExtensions.AsNoTracking(queryBuilder(context.Set <Lead>())).ToList();
                foreach (var lead in leads)
                {
                    Lead stubLead = new Lead()
                    {
                        Id = lead.Id, RouteId = null
                    };
                    context.Set <Lead>().Attach(stubLead);
                    context.Entry(stubLead).Property(x => x.RouteId).IsModified = true;
                }
            }
            finally
            {
                if (createdNew)
                {
                    await DbContextManager.CurrentContext.SaveChangesAsync();

                    DbContextManager.DisposeContext();
                }
            }
        }
コード例 #3
0
        public static IQueryable ApplyAsNoTracking(IQueryable source, Type elementType)
        {
            var method = TypeFns.GetMethodByExample((IQueryable <Object> q) =>
                                                    EntityFrameworkQueryableExtensions.AsNoTracking <Object>(q), elementType);
            var func = QueryBuilder.BuildIQueryableFunc(elementType, method);

            return(func(source));
        }
コード例 #4
0
        internal static IQueryable <TEntity> SetTrackingOptions <TEntity>(this IQueryable <TEntity> query, QueryTracking queryTrackingOptions) where TEntity : class
        {
            if (queryTrackingOptions == QueryTracking.AsTracking)
            {
                return(query.AsTracking());
            }

            return(EntityFrameworkQueryableExtensions.AsNoTracking(query));
        }
コード例 #5
0
        /// <summary>
        /// 带mapper
        /// </summary>
        /// <typeparam name="TEntityOrView"></typeparam>
        /// <typeparam name="TDto"></typeparam>
        /// <param name="query"></param>
        /// <param name="pagedInputDto"></param>
        /// <param name="configurationProvider"></param>
        /// <returns></returns>
        public static async Task <MyPagedResult <TDto> > GetPageAsync <TEntityOrView, TDto>(this IQueryable <TEntityOrView> query, PagedInputDto pagedInputDto) where TEntityOrView : class where TDto : class
        {
            query = EntityFrameworkQueryableExtensions.AsNoTracking <TEntityOrView>(query);
            //排序
            if (!string.IsNullOrEmpty(pagedInputDto.Order))
            {
                List <string> strList = pagedInputDto.Order.Split(new char[1]
                {
                    ','
                }).ToList();
                for (int i = 0; i < strList.Count; i++)
                {
                    query = ((i != 0) ? ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.ThenByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())) : ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.OrderByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())));
                }
            }
            //if (!string.IsNullOrEmpty(pagedInputDto.Order))
            //{
            //    query = DynamicQueryable.OrderBy<TEntityOrView>(query, pagedInputDto.Order, Array.Empty<object>());
            //}
            if (pagedInputDto.Filter != null)
            {
                string   text  = pagedInputDto.Filter.ToWhere();
                object[] array = pagedInputDto.Filter.paramValues.ToArray();
                query = DynamicQueryable.Where <TEntityOrView>(query, text, array);
            }
            IQueryable <TEntityOrView> queryable = query.Skip(pagedInputDto.SkipCount).Take(pagedInputDto.PageSize);

            IQueryable <TDto> queryable2;

            if (!string.IsNullOrEmpty(pagedInputDto.Select))
            {
                queryable2 = DynamicQueryable.Select(queryable, pagedInputDto.Select, Array.Empty <object>()).Cast <TDto>();
            }
            else
            {
                queryable2 = Extensions.ProjectTo <TDto>(queryable, (AutoMapper.IConfigurationProvider)pagedInputDto.configurationProvider, Array.Empty <Expression <Func <TDto, object> > >());
            }
            List <TDto> dataList = await EntityFrameworkQueryableExtensions.ToListAsync <TDto>(queryable2, default(CancellationToken));

            MyPagedResult <TDto> obj = new MyPagedResult <TDto>();

            obj.PageSize  = pagedInputDto.PageSize;
            obj.PageIndex = pagedInputDto.PageIndex;
            obj.DataList  = dataList;
            obj.RowCount  = query.Count();
            return(obj);
        }
コード例 #6
0
ファイル: LeadRepository.cs プロジェクト: vipdrv/vipdrv-core
 public async Task NullifyExpertRelation(Func <IQueryable <Lead>, IQueryable <Lead> > queryBuilder)
 {
     using (DbContext context = DbContextManager.BuildNewContext())
     {
         List <Lead> leads = EntityFrameworkQueryableExtensions.AsNoTracking(queryBuilder(context.Set <Lead>())).ToList();
         foreach (var lead in leads)
         {
             Lead stubLead = new Lead()
             {
                 Id = lead.Id, ExpertId = null
             };
             context.Set <Lead>().Attach(stubLead);
             context.Entry(stubLead).Property(x => x.ExpertId).IsModified = true;
         }
         await context.SaveChangesAsync();
     }
 }
コード例 #7
0
 public static IQueryable <TEntity> AsNoTracking <TEntity>(this IQueryable <TEntity> query) where TEntity : class
 {
     return(EntityFrameworkQueryableExtensions.AsNoTracking(query));
 }
コード例 #8
0
 public IQueryable <TEntity> AsNoTracking <TEntity>(IQueryable <TEntity> source)
     where TEntity : class =>
 EntityFrameworkQueryableExtensions.AsNoTracking(source);
コード例 #9
0
        protected override async Task <IEnumerable <SelectListItem> > GetSelectListItemsAsync(SelectListContext context)
        {
            //Get DbContext from DI container
            DbContext db = (DbContext)context.HttpContext.RequestServices.GetService(DbContextType);

            if (db == null)
            {
                throw new Exception("Database not found");
            }

            //Get DbSet as IQueryable
            IQueryable query = (IQueryable)_dbContextSetMethod.MakeGenericMethod(ModelType).Invoke(db, null);

            if (!string.IsNullOrEmpty(RawSql))
            {
                query = (IQueryable)RelationalQueryableExtensions.FromSql((dynamic)query, RawSql, RawSqlParameters);
            }

            if (!EnableChangeTracking)
            {
                query = (IQueryable)EntityFrameworkQueryableExtensions.AsNoTracking((dynamic)query);
            }

            if (context.SelectedOnly)
            {
                //Select by Id
                var whereClause = DbContextHelper.SearchForEntityByValues(ModelType, DataValueField, context.CurrentValues);
                query = (IQueryable)_dbContextWhereClauseMethod.MakeGenericMethod(ModelType).Invoke(null, new object[] { query, whereClause });
            }
            else
            {
                if (context.ModelExplorer.Metadata is DefaultModelMetadata defaultModelMetadata)
                {
                    //Loop over where clauses

                    IEnumerable <SelectListDbWhereEqualsAttribute> whereClauseAttributes = null;
                    if (defaultModelMetadata.MetadataKind == ModelMetadataKind.Property)
                    {
                        whereClauseAttributes = defaultModelMetadata.Attributes.PropertyAttributes.OfType <SelectListDbWhereEqualsAttribute>().Where(a => a.SelectListId == this.SelectListId);
                    }
                    else if (defaultModelMetadata.MetadataKind == ModelMetadataKind.Type)
                    {
                        whereClauseAttributes = defaultModelMetadata.Attributes.TypeAttributes.OfType <SelectListDbWhereEqualsAttribute>().Where(a => a.SelectListId == this.SelectListId);
                    }

                    if (whereClauseAttributes != null)
                    {
                        foreach (var where in whereClauseAttributes)
                        {
                            var whereClause = LamdaHelper.SearchForEntityByProperty(ModelType, where.PropertyName, where.Values);
                            query = (IQueryable)_dbContextWhereClauseMethod.MakeGenericMethod(ModelType).Invoke(null, new object[] { query, whereClause });
                        }
                    }
                }
            }

            //Order By
            if (!string.IsNullOrWhiteSpace(OrderByProperty))
            {
                if (OrderByType == "asc")
                {
                    query = (IQueryable)_dbContextOrderByMethod.MakeGenericMethod(ModelType).Invoke(null, new object[] { query, OrderByProperty, true });
                }
                else
                {
                    query = (IQueryable)_dbContextOrderByMethod.MakeGenericMethod(ModelType).Invoke(null, new object[] { query, OrderByProperty, false });
                }
            }

            //Skip
            query = (IQueryable)Queryable.Skip((dynamic)query, Skip);

            //Take
            query = (IQueryable)Queryable.Take((dynamic)query, Take);

            //Get Results
            IEnumerable results = (IEnumerable)(await EntityFrameworkQueryableExtensions.ToListAsync((dynamic)query, CancellationToken.None));

            return(new ModelMultiSelectList(context.Html, results, DataValueField, DataTextFieldExpression));
        }
コード例 #10
0
 public IQueryable <T> AsNoTracking <T>(IQueryable <T> query)
     where T : class
 {
     return(EntityFrameworkQueryableExtensions.AsNoTracking(query));
 }