Example #1
0
        private bool EvaluateOperatorMethod(MethodCallExpression node)
        {
            if (node.Method.DeclaringType != typeof(CqlOperator))
            {
                return(false);
            }
            var            column = _pocoData.GetColumnByMemberName(_currentBindingName.Get());
            object         value  = Expression.Lambda(node.Arguments[0]).Compile().DynamicInvoke();
            ExpressionType expressionType;

            switch (node.Method.Name)
            {
            case "Append":
                expressionType = ExpressionType.AddAssign;
                break;

            case "Prepend":
                expressionType = ExpressionType.PreIncrementAssign;
                break;

            case "SubstractAssign":
                expressionType = ExpressionType.SubtractAssign;
                break;

            default:
                return(false);
            }
            _projections.Add(Tuple.Create(column.ColumnName, value, expressionType));
            return(true);
        }
Example #2
0
        /// <summary>
        /// Tries to evaluate the current expression and add it as a projection
        /// </summary>
        private Expression AddProjection(Expression node, PocoColumn column = null)
        {
            object value;

            if (node is MemberExpression)
            {
                value = GetClosureValue((MemberExpression)node);
            }
            else
            {
                value = Expression.Lambda(node).Compile().DynamicInvoke();
            }
            if (column == null)
            {
                column = _pocoData.GetColumnByMemberName(_currentBindingName.Get());
                if (column == null)
                {
                    throw new CqlLinqNotSupportedException(node, _parsePhase.Get());
                }
            }
            _projections.Add(Tuple.Create(column, value, ExpressionType.Assign));
            return(node);
        }