Exemplo n.º 1
0
        private void AddParam(FilterRule rule)
        {
            //如果是当前用户
            if (rule.Value.Equals(FilterCurrent.CurrentUserId.ToString()))
            {
                ListParams.Add(User.UserInfo.UserId);
                return;
            }
            var propertyInfo = SourceType.GetProperty(rule.Field);

            if (propertyInfo == null)
            {
                //默认是字符串类型
                ListParams.Add(rule.Value);
            }
            if (!propertyInfo.PropertyType.IsEnum)
            {
                var value = Convert.ChangeType(rule.Value, propertyInfo.PropertyType);
                ListParams.Add(value);
                return;
            }
            var eValue = Enum.Parse(propertyInfo.PropertyType, rule.Value);

            ListParams.Add(eValue);
        }
Exemplo n.º 2
0
        private void AddArrayParam(FilterRule rule)
        {
            var propertyInfo = SourceType.GetProperty(rule.Field);

            if (propertyInfo == null)
            {
                //默认是字符串类型
                ListParams.Add(rule.Value);
            }
            var valueArr = rule.Value.Split(',');
            var arr      = Array.CreateInstance(propertyInfo.PropertyType, valueArr.Length);

            if (propertyInfo.PropertyType.IsEnum)
            {
                for (int i = 0; i < valueArr.Length; i++)
                {
                    var enumValue = (Enum)Enum.Parse(propertyInfo.PropertyType, valueArr[i]);
                    arr.SetValue(enumValue, i);
                }
            }
            else
            {
                for (int i = 0; i < valueArr.Length; i++)
                {
                    var objValue = Convert.ChangeType(valueArr[i], propertyInfo.PropertyType);
                    arr.SetValue(objValue, i);
                }
            }

            ListParams.Add(arr);
        }
Exemplo n.º 3
0
        private string TranslateRule(FilterRule rule)
        {
            var strBuilder = new StringBuilder();

            if (rule == null)
            {
                return(" 1=1 ");
            }
            if (currentParamMath.Contains(rule.Field))
            {
                strBuilder.Append(GetCurrentRule(rule));
                return(strBuilder.ToString());
            }

            switch (rule.Op)
            {
            case FilterRuleOp.Equal:
            case FilterRuleOp.Greater:
            case FilterRuleOp.GreaterOrEqual:
            case FilterRuleOp.Less:
            case FilterRuleOp.LessOrEqual:
            case FilterRuleOp.NotEqual:
                strBuilder.Append(rule.Field);
                strBuilder.Append(GetFilterRuleOpQueryText(rule.Op));
                strBuilder.Append(GetParamToken());
                AddParam(rule);
                break;

            case FilterRuleOp.Like:
                strBuilder.Append(rule.Field);
                strBuilder.Append($".Contains({GetParamToken()})");
                ListParams.Add(rule.Value);
                break;

            case FilterRuleOp.StartWith:
                strBuilder.Append(rule.Field);
                strBuilder.Append($".StartsWith({GetParamToken()})");
                ListParams.Add(rule.Value);
                break;

            case FilterRuleOp.EndWith:
                strBuilder.Append(rule.Field);
                strBuilder.Append($".EndsWith({GetParamToken()})");
                ListParams.Add(rule.Value);
                break;

            case FilterRuleOp.In:
                strBuilder.Append($"{GetParamToken()}.Contains(outerIt.{rule.Field})");
                AddArrayParam(rule);
                break;

            case FilterRuleOp.Notin:
                strBuilder.Append($"!{GetParamToken()}.Contains(outerIt.{rule.Field})");
                AddArrayParam(rule);
                break;

            default:
                break;
            }
            return(strBuilder.ToString());
        }