public void GetWhereExpressionTest()
        {
            WhereConditionArguments <TestClassA> whereConditionArguments = new WhereConditionArguments <TestClassA>();

            whereConditionArguments.SpliceMode = Enums.EnumSpliceMode.AndAlso;
            whereConditionArguments.WhereConditions.Add(new WhereCondition()
            {
                Key = "A24235634", Value = "", MatchMode = Enums.EnumMatchMode.Equal
            });
            whereConditionArguments.WhereConditions.Add(new WhereCondition()
            {
                Key = nameof(TestClassA.A), Value = "1", MatchMode = Enums.EnumMatchMode.NotEqual
            });
            whereConditionArguments.WhereConditions.Add(new WhereCondition()
            {
                Key = nameof(TestClassA.A), Value = new int[] { 1, 2, 3, 4 }, MatchMode = Enums.EnumMatchMode.In
            });
            WhereConditionArguments <TestClassA> w2 = new WhereConditionArguments <TestClassA>
            {
                SpliceMode = Enums.EnumSpliceMode.OrElse
            };

            w2.WhereConditions.Add(new WhereCondition()
            {
                Key = nameof(TestClassA.B), Value = "30", MatchMode = Enums.EnumMatchMode.NotEqual
            });
            w2.WhereConditions.Add(new WhereCondition()
            {
                Key = "DDDDD", Value = "", MatchMode = Enums.EnumMatchMode.In
            });
            w2.WhereConditions.Add(new WhereCondition()
            {
                Key = nameof(TestClassA.A), Value = new int[] { 1, 2, 3, 4 }, MatchMode = Enums.EnumMatchMode.In
            });
            whereConditionArguments.InnerWhereConditionArguments.Add(w2);

            whereConditionArguments = JsonConvert.DeserializeObject <WhereConditionArguments <TestClassA> >(JsonConvert.SerializeObject(whereConditionArguments));


            List <WhereConditionFilterAttribute> whereConditionFilterAttributes = new List <WhereConditionFilterAttribute>();

            whereConditionFilterAttributes.Add(new WhereConditionFilterAttribute(Enums.EnumMatchMode.All, nameof(TestClassA.A), nameof(TestClassA.B)));


            WhereConditionArgumentsInterpreter whereConditionArgumentsInterpret = new WhereConditionArgumentsInterpreter();

            _ = whereConditionArgumentsInterpret.ApplyFilter(whereConditionArguments, whereConditionFilterAttributes);


            WhereConditionArguments b = whereConditionArgumentsInterpret.Parse(whereConditionArguments);

            whereConditionArguments = b as WhereConditionArguments <TestClassA>;
            Expression <Func <TestClassA, bool> > c = whereConditionArguments.GetWhereLambdaExpression();
        }
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }
            string modelName = bindingContext.BinderModelName;

            if (string.IsNullOrEmpty(modelName))
            {
                modelName = bindingContext.ModelMetadata.Name;
            }
            ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);

            if (valueProviderResult == ValueProviderResult.None)
            {
                await Task.CompletedTask;
                return;
            }
            bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);
            string requestString = valueProviderResult.FirstValue;

            if (string.IsNullOrEmpty(requestString))
            {
                await Task.CompletedTask;
                return;
            }
            WhereConditionArguments whereParameterArguments = JsonConvert.DeserializeObject(requestString, bindingContext.ModelType) as WhereConditionArguments;

            try
            {
                IEnumerable <WhereConditionFilterAttribute> whereParameterAttributes = ((DefaultModelMetadata)bindingContext.ModelMetadata).Attributes.ParameterAttributes
                                                                                       .Where(attr => attr.GetType() == typeof(WhereConditionFilterAttribute)).Select(attr => attr as WhereConditionFilterAttribute);
                WhereConditionArgumentsInterpreter whereConditionArgumentsInterpret = new WhereConditionArgumentsInterpreter();
                whereParameterArguments = whereConditionArgumentsInterpret.ApplyFilter(whereParameterArguments, whereParameterAttributes?.ToList());
                whereParameterArguments = whereConditionArgumentsInterpret.Parse(whereParameterArguments);
            }
            catch (Exception ex)
            {
                bindingContext.ModelState.TryAddModelError(bindingContext.ModelName, ex.Message);
                await Task.CompletedTask;
                return;
            }

            bindingContext.Result = ModelBindingResult.Success(whereParameterArguments);
            await Task.CompletedTask;

            return;
        }