public UserFilterRequest(string title, string name, List<string> value, bool inclusive = true)
        {
            var expressionType = ExpressionTypes.Equal;
            if (value.Count > 1)
                expressionType = ExpressionTypes.In;

            if (!inclusive)
            {
                expressionType = ExpressionTypes.NotEqual;
                if (value.Count > 1)
                    expressionType = ExpressionTypes.NotIn;
            }

            //default, equals pattern
            var pattern = "[{0}]=[{1}]";
            var expression = string.Format(pattern, name, string.Join(",", value));
            if (expressionType == ExpressionTypes.NotEqual)
            {
                pattern = "[{0}]<>[{1}]";
                expression = string.Format(pattern, name, string.Join(",", value));
            }
            if (expressionType == ExpressionTypes.In || expressionType == ExpressionTypes.NotIn)
            {
                pattern = (expressionType == ExpressionTypes.In) ? "[{0}] IN ([{1}])" : "[{0}] NOT IN ([{1}])";
                expression = string.Format(pattern, name, string.Join("],[", value));
            }

            UserFilter = new UserFilter
                         	{
                         		Content = new UserFilterContent()
                         		          	{
                         		          		Expression = expression
                         		          	},
                         		Meta = new UserFilterMeta()
                         		       	{
                         		       		Title = title
                         		       	}
                         	};
        }
        public UserFilterRequest(string title, Dictionary<string,List<string>> fillterCollection, bool inclusive = true)
        {
            var expressions = new List<string>();
            foreach (var item in fillterCollection)
            {
                var expressionType = ExpressionTypes.Equal;
                if (item.Value.Count > 1)
                    expressionType = ExpressionTypes.In;

                if (!inclusive)
                {
                    expressionType = ExpressionTypes.NotEqual;
                    if (item.Value.Count > 1)
                        expressionType = ExpressionTypes.NotIn;
                }

                //default, equals pattern
                var pattern = "[{0}]=[{1}]";
                var expression = string.Format(pattern, item.Key, string.Join(",", item.Value));
                if (expressionType == ExpressionTypes.NotEqual)
                {
                    pattern = "[{0}]<>[{1}]";
                    expression = string.Format(pattern, item.Key, string.Join(",", item.Value));
                }
                if (expressionType == ExpressionTypes.In || expressionType == ExpressionTypes.NotIn)
                {
                    pattern = (expressionType == ExpressionTypes.In) ? "[{0}] IN ([{1}])" : "[{0}] NOT IN ([{1}])";
                    expression = string.Format(pattern, item.Key, string.Join("],[", item.Value));
                }
                expressions.Add(expression);
            }

            UserFilter = new UserFilter
                         	{
                         		Content = new UserFilterContent()
                         		          	{
                         		          		Expression = string.Join(" AND ", expressions)
                         		          	},
                         		Meta = new UserFilterMeta()
                         		       	{
                         		       		Title = title
                         		       	}
                         	};
        }