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