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); }
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); }
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()); }