/// <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); }
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(); } } }
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)); }
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)); }
/// <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); }
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(); } }
public static IQueryable <TEntity> AsNoTracking <TEntity>(this IQueryable <TEntity> query) where TEntity : class { return(EntityFrameworkQueryableExtensions.AsNoTracking(query)); }
public IQueryable <TEntity> AsNoTracking <TEntity>(IQueryable <TEntity> source) where TEntity : class => EntityFrameworkQueryableExtensions.AsNoTracking(source);
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)); }
public IQueryable <T> AsNoTracking <T>(IQueryable <T> query) where T : class { return(EntityFrameworkQueryableExtensions.AsNoTracking(query)); }