Ejemplo n.º 1
0
        private string WhereExpression(Expression expression, int exprtype, string entityName)
        {
            string result = "";

            if (expression is BinaryExpression)
            {
                var expr = expression as BinaryExpression;
                result += WhereExpression(expr.Left, 0, entityName);
                result  = string.Format(result, _SQLDataMappingExtension.GetOperationValue(expr));
                result += WhereExpression(expr.Right, 1, entityName);
            }
            else if (expression is MethodCallExpression)
            {
                var expr = expression as MethodCallExpression;
                result += WhereExpression(expr.Object, 0, entityName);
                result  = string.Format(result, _SQLDataMappingExtension.GetOperationValue(expr));
                result  = string.Format(result.Replace(_DataParameter[_DataParameterIndex].ParameterName, ""), _DataParameter[_DataParameterIndex].ParameterName);
                result += WhereExpression(expr.Arguments[0], 1, entityName);
            }
            else if (expression is MemberExpression)
            {
                var expr = expression as MemberExpression;
                if (exprtype == 0)
                {
                    string memberName = expr.Member.Name;
                    if (expr.Member.ReflectedType.IsGenericType && expr.Member.ReflectedType.GetGenericTypeDefinition().Equals(typeof(Nullable <>)))
                    {
                        memberName = (expr.Expression as MemberExpression).Member.Name;
                    }
                    result += " and " + entityName + ".[" + memberName + "] {0} @" + memberName + _DataParameterIndex.ToString();
                    _DataParameter.Add(new SqlParameter());
                    _DataParameter[_DataParameterIndex].ParameterName = "@" + memberName + _DataParameterIndex.ToString();
                }
                else if (exprtype == 1)
                {
                    _DataParameter[_DataParameterIndex].Value = Expression.Lambda(expr).Compile().DynamicInvoke();
                    _DataParameterIndex++;
                    result += "";
                }
            }
            else if (expression is ConstantExpression)
            {
                var expr = expression as ConstantExpression;
                _DataParameter[_DataParameterIndex].Value = expr.Value;
                _DataParameterIndex++;
                result += "";
            }
            return(result);
        }