Example #1
0
        /// <summary>
        /// BinaryExpression oluştururup döndürür.
        /// </summary>
        /// <param name="argParams"></param>
        /// <param name="filterItem"></param>
        /// <returns></returns>
        private BinaryExpression GetBinaryExpression(ParameterExpression argParams, FilterItemDto filterItem)
        {
            BinaryExpression filterExpression = null;

            Expression filterProp = Expression.Property(argParams, filterItem.PropertyName); //x.BKTX

            if (filterItem.ConversionMethodName != null && filterItem.ConversionMethodName.Equals("ToLower"))
            {
                filterProp = Expression.Call(filterProp, ToLowerMethod);
            }
            else if (filterItem.ConversionMethodName != null && filterItem.ConversionMethodName.Equals("ToUpper"))
            {
                filterProp = Expression.Call(filterProp, ToUpperMethod);
            }

            ConstantExpression filterValue = Expression.Constant(null);

            if (filterItem.Operation != "IN")
            {
                filterValue = GetConstanstValue(filterProp.Type, filterItem.PropertyValue);
            }

            switch (filterItem.Operation)
            {
            case "CT":
            {
                MethodInfo ContainsMethod = filterProp.Type.GetMethod("Contains", new[] { filterProp.Type });
                CalledExpression = Expression.Call(filterProp, ContainsMethod, filterValue);         // x.BKTX.ToUpper().Contains("xx")
                filterExpression = Expression.MakeBinary(ExpressionType.Equal, CalledExpression, TrueConstant);
                break;
            }

            case "IN":
            {
                var filterItemParts = filterItem.PropertyValue.Split(',').ToList();
                if (filterItemParts.Any(string.IsNullOrEmpty))
                {
                    int    emptyIndex = filterItemParts.FindIndex(string.IsNullOrEmpty);
                    string temp       = filterItemParts[^ 1];
Example #2
0
        /// <summary>
        /// BinaryExpression oluştururup döndürür.
        /// </summary>
        /// <param name="argParams"></param>
        /// <param name="filterItem"></param>
        /// <returns></returns>
        private BinaryExpression GetBinaryExpression(ParameterExpression argParams, FilterItemDto filterItem)
        {
            BinaryExpression filterExpression;

            Expression filterProp = Expression.Property(argParams, filterItem.PropertyName); //x.BKTX

            if (filterItem.ConversionMethodName != null && filterItem.ConversionMethodName.Equals("ToLower"))
            {
                filterProp = Expression.Call(filterProp, ToLowerMethod);
            }
            else if (filterItem.ConversionMethodName != null && filterItem.ConversionMethodName.Equals("ToUpper"))
            {
                filterProp = Expression.Call(filterProp, ToUpperMethod);
            }

            ConstantExpression filterValue = Expression.Constant(filterItem.PropertyValue);

            if (filterProp.Type != typeof(string))
            {
                if (filterProp.Type == typeof(Decimal))
                {
                    filterValue = Expression.Constant(Decimal.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(int))
                {
                    filterValue = Expression.Constant(int.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(short))
                {
                    filterValue = Expression.Constant(short.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(Int64))
                {
                    filterValue = Expression.Constant(Int64.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(byte))
                {
                    filterValue = Expression.Constant(byte.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(DateTime))
                {
                    filterValue = Expression.Constant(DateTime.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(bool))
                {
                    filterValue = Expression.Constant(bool.Parse(filterItem.PropertyValue));
                }
                if (filterProp.Type == typeof(double))
                {
                    filterValue = Expression.Constant(double.Parse(filterItem.PropertyValue));
                }
            }

            switch (filterItem.Operation)
            {
            case "CT":
                CalledExpression =
                    Expression.Call(filterProp, ContainsMethod, filterValue);     // x.BKTX.ToUpper().Contains("xx")
                filterExpression = Expression.MakeBinary(ExpressionType.Equal, CalledExpression, TrueConstant);
                break;

            case "IN":
                filterValue      = Expression.Constant(filterItem.PropertyValue.Split(','), typeof(IEnumerable <string>));
                CalledExpression = Expression.Call(InMethod, filterValue, filterProp);
                filterExpression = Expression.MakeBinary(ExpressionType.Equal, CalledExpression, TrueConstant);
                break;

            case "GT":
                CalledExpression = Expression.Call(filterProp, CompareToMethod, filterValue);
                filterExpression = Expression.MakeBinary(ExpressionType.GreaterThanOrEqual, CalledExpression,
                                                         ZeroConstant);
                break;

            case "LT":
                CalledExpression = Expression.Call(filterProp, CompareToMethod, filterValue);
                filterExpression =
                    Expression.MakeBinary(ExpressionType.LessThanOrEqual, CalledExpression, ZeroConstant);
                break;

            case "NE":
                filterExpression = Expression.NotEqual(filterProp, filterValue);
                break;

            default:
                filterExpression = Expression.Equal(filterProp, filterValue);
                break;
            }

            return(filterExpression);
        }