/// <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];
/// <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); }