public static async Task <RepositoryResponse <PaginationModel <TView> > > GetListPostByAddictionalField <TView>( string fieldName, object fieldValue, string culture, MixEnums.MixDataType dataType , MixEnums.CompareType filterType = MixEnums.CompareType.Eq , string orderByPropertyName = null, Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Asc, int?pageSize = null, int?pageIndex = null , MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixPost, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { var result = new RepositoryResponse <PaginationModel <TView> >() { IsSucceed = true, Data = new PaginationModel <TView>() { PageIndex = pageIndex.HasValue ? pageIndex.Value : 0, PageSize = pageSize } }; // Get Value Predicate By Type Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.AttributeSetName == MixConstants.AttributeSetName.ADDITIONAL_FIELD_POST && m.AttributeFieldName == fieldName; var pre = GetValuePredicate(fieldValue.ToString(), filterType, dataType); if (pre != null) { valPredicate = Mix.Heart.Helpers.ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And); } var query = context.MixAttributeSetValue.Where(valPredicate).Select(m => m.DataId).Distinct(); var dataIds = query.ToList(); var relatedQuery = context.MixRelatedAttributeData.Where( m => m.ParentType == MixEnums.MixAttributeSetDataType.Post.ToString() && m.Specificulture == culture && dataIds.Any(d => d == m.DataId)); var postIds = relatedQuery.Select(m => int.Parse(m.ParentId)).Distinct().AsEnumerable().ToList(); result = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync( m => m.Specificulture == culture && postIds.Any(p => p == m.Id) , orderByPropertyName, direction , pageSize ?? 100, pageIndex ?? 0 , null, null , context, transaction); return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root context.Dispose(); } } }
public static Expression <Func <TModel, bool> > FilterObjectSet <TModel, T>(string propName, T data2, MixEnums.CompareType filterType) { Type type = typeof(TModel); var par = Expression.Parameter(type, "model"); Type fieldPropertyType; Expression fieldPropertyExpression; FieldInfo fieldInfo = type.GetField(propName); if (fieldInfo == null) { PropertyInfo propertyInfo = type.GetProperty(propName); if (propertyInfo == null) { throw new Exception(); } fieldPropertyType = propertyInfo.PropertyType; fieldPropertyExpression = Expression.Property(par, propertyInfo); } else { fieldPropertyType = fieldInfo.FieldType; fieldPropertyExpression = Expression.Field(par, fieldInfo); } BinaryExpression eq = null; switch (filterType) { case MixEnums.CompareType.Eq: eq = Expression.Equal(fieldPropertyExpression, Expression.Constant(data2, fieldPropertyType)); break; case MixEnums.CompareType.Lt: eq = Expression.LessThan(fieldPropertyExpression, Expression.Constant(data2, fieldPropertyType)); break; case MixEnums.CompareType.Gt: eq = Expression.GreaterThan(fieldPropertyExpression, Expression.Constant(data2, fieldPropertyType)); break; case MixEnums.CompareType.Lte: eq = Expression.LessThanOrEqual(fieldPropertyExpression, Expression.Constant(data2, fieldPropertyType)); break; case MixEnums.CompareType.Gte: eq = Expression.GreaterThanOrEqual(fieldPropertyExpression, Expression.Constant(data2, fieldPropertyType)); break; case MixEnums.CompareType.In: var method = typeof(string).GetMethod("Contains"); var call = Expression.Call(par, method, Expression.Constant(data2, typeof(string))); return(Expression.Lambda <Func <TModel, bool> >(call, par)); default: break; } return(Expression.Lambda <Func <TModel, bool> >(eq, par)); }
private static Expression <Func <MixAttributeSetValue, bool> > GetValuePredicate(string fieldValue , MixEnums.CompareType filterType, MixEnums.MixDataType dataType) { Expression <Func <MixAttributeSetValue, bool> > valPredicate = null; switch (dataType) { case MixEnums.MixDataType.Date: case MixEnums.MixDataType.Time: if (DateTime.TryParse(fieldValue, out DateTime dtValue)) { valPredicate = FilterObjectSet <MixAttributeSetValue, DateTime>("DateTimeValue", dtValue, filterType); } break; case MixEnums.MixDataType.Double: if (double.TryParse(fieldValue, out double dbValue)) { valPredicate = FilterObjectSet <MixAttributeSetValue, double>("DoubleValue", dbValue, filterType); } break; case MixEnums.MixDataType.Boolean: if (bool.TryParse(fieldValue, out bool boolValue)) { valPredicate = FilterObjectSet <MixAttributeSetValue, bool>("BooleanValue", boolValue, filterType); } break; case MixEnums.MixDataType.Integer: if (int.TryParse(fieldValue, out int intValue)) { valPredicate = FilterObjectSet <MixAttributeSetValue, int>("IntegerValue", intValue, filterType); } break; case MixEnums.MixDataType.Reference: break; case MixEnums.MixDataType.Duration: case MixEnums.MixDataType.Custom: case MixEnums.MixDataType.DateTime: case MixEnums.MixDataType.PhoneNumber: case MixEnums.MixDataType.Text: case MixEnums.MixDataType.Html: case MixEnums.MixDataType.MultilineText: case MixEnums.MixDataType.EmailAddress: case MixEnums.MixDataType.Password: case MixEnums.MixDataType.Url: case MixEnums.MixDataType.ImageUrl: case MixEnums.MixDataType.CreditCard: case MixEnums.MixDataType.PostalCode: case MixEnums.MixDataType.Upload: case MixEnums.MixDataType.Color: case MixEnums.MixDataType.Icon: case MixEnums.MixDataType.VideoYoutube: case MixEnums.MixDataType.TuiEditor: case MixEnums.MixDataType.QRCode: default: valPredicate = FilterObjectSet <MixAttributeSetValue, string>("StringValue", fieldValue, filterType); break; } return(valPredicate); }
public static Expression<Func<TModel, bool>> FilterObjectSet<TModel, T>(string propName, T data2, MixEnums.CompareType filterType) { V_0 = Type.GetTypeFromHandle(//
private static Expression<Func<MixAttributeSetValue, bool>> GetValuePredicate(string fieldValue, MixEnums.CompareType filterType, MixEnums.MixDataType dataType) { V_0 = null; switch (dataType) { case 0: case 1: case 4: case 5: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 19: case 20: case 21: case 24: { Label1: V_0 = MixCmsHelper.FilterObjectSet<MixAttributeSetValue, string>("StringValue", fieldValue, filterType); goto Label0; } case 2: case 3: { if (!DateTime.TryParse(fieldValue, out V_1)) { goto Label0; } V_0 = MixCmsHelper.FilterObjectSet<MixAttributeSetValue, DateTime>("DateTimeValue", V_1, filterType); goto Label0; } case 6: { if (!double.TryParse(fieldValue, out V_2)) { goto Label0; } V_0 = MixCmsHelper.FilterObjectSet<MixAttributeSetValue, double>("DoubleValue", V_2, filterType); goto Label0; } case 18: { if (!bool.TryParse(fieldValue, out V_3)) { goto Label0; } V_0 = MixCmsHelper.FilterObjectSet<MixAttributeSetValue, bool>("BooleanValue", V_3, filterType); goto Label0; } case 22: { if (!int.TryParse(fieldValue, out V_4)) { goto Label0; } V_0 = MixCmsHelper.FilterObjectSet<MixAttributeSetValue, int>("IntegerValue", V_4, filterType); goto Label0; } case 23: { Label0: return V_0; } default: { goto Label1; } } }
V_2 = Expression.Parameter(Type.GetTypeFromHandle(// // Current member / type: System.Collections.Generic.List`1<Mix.Cms.Lib.ViewModels.MixPages.ReadListItemViewModel> Mix.Cms.Lib.MixCmsHelper::GetCategory(Microsoft.AspNetCore.Mvc.IUrlHelper,System.String,Mix.Cms.Lib.MixEnums/MixPageType,System.String) // Exception in: System.Collections.Generic.List<Mix.Cms.Lib.ViewModels.MixPages.ReadListItemViewModel> GetCategory(Microsoft.AspNetCore.Mvc.IUrlHelper,System.String,Mix.Cms.Lib.MixEnums/MixPageType,System.String) // Specified method is not supported. // // mailto: [email protected] public static async Task<RepositoryResponse<PaginationModel<TView>>> GetListPostByAddictionalField<TView>(string fieldName, object fieldValue, string culture, MixEnums.MixDataType dataType, MixEnums.CompareType filterType = 1, string orderByPropertyName = null, MixHeartEnums.DisplayDirection direction = 0, int? pageSize = null, int? pageIndex = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase<MixCmsContext, MixPost, TView> { V_0.fieldName = fieldName; V_0.fieldValue = fieldValue; V_0.culture = culture; V_0.dataType = dataType; V_0.filterType = filterType; V_0.orderByPropertyName = orderByPropertyName; V_0.direction = direction; V_0.pageSize = pageSize; V_0.pageIndex = pageIndex; V_0._context = _context; V_0._transaction = _transaction; V_0.u003cu003et__builder = AsyncTaskMethodBuilder<RepositoryResponse<PaginationModel<TView>>>.Create(); V_0.u003cu003e1__state = -1; V_0.u003cu003et__builder.Start<MixCmsHelper.u003cGetListPostByAddictionalFieldu003ed__15<TView>>(ref V_0); return V_0.u003cu003et__builder.get_Task(); }