private bool TryHandleContains(SubQueryExpression subquery, ContainsResultOperator ro)
        {
            switch (subquery.QueryModel.MainFromClause.FromExpression)
            {
            case ConstantExpression expr:
                if (!(expr.Value is IList list))
                {
                    return(false);
                }

                CurrentExpression.Add("IN");
                Visit(ro.Item);
                var opList = new List <object> {
                    "[]"
                };
                opList.AddRange(list.Cast <object>());
                CurrentExpression.Add(opList);
                return(true);

            case MemberExpression expr:
                var last = _currentExpression;
                CurrentExpression.Add("ARRAY_CONTAINS()");
                Visit(expr);
                Visit(ro.Item);
                _currentExpression = last;
                return(true);
            }

            return(false);
        }
Пример #2
0
 private void BackButton_Click(object sender, RoutedEventArgs e)
 {
     if (Display != null && Display.Length > 0)
     {
         // On supprime le dernier caractère du calcul
         Display           = Display.Remove(Display.Length - 1);
         CurrentExpression = CurrentExpression.Remove(CurrentExpression.Length - 2);
     }
 }
Пример #3
0
 private void AssignOperatorToExpression(string oprtr)
 {
     if (DisplayText.EndWithAny(Models.Calculator.OPERATORS))
     {
         CurrentExpression.Remove(CurrentExpression.Length - 1, 1);
     }
     CurrentExpression.Append(oprtr);
     DisplayText = CurrentExpression.ToString();
 }
Пример #4
0
        private void OnEqualPressCommandExecute(object p)
        {
            if (CurrentExpression.Content != "")
            {
                CurrentExpression.CalculateResult();
                ExpressionHistory.Add(CurrentExpression);
                OnPropertyChanged("CurrentExpression");

                CurrentExpression = new MathExpression();
            }
        }
        protected override Expression VisitMember(MemberExpression node)
        {
            var sb = new StringBuilder();

            var currentNode = (Expression)node;

            while (currentNode.NodeType == ExpressionType.MemberAccess || currentNode.NodeType == ExpressionType.Call)
            {
                if (currentNode.NodeType == ExpressionType.Call)
                {
                    var ce = (currentNode as MethodCallExpression);
                    if (ce.Method.Name != "get_Item")
                    {
                        return(base.VisitMember(node));
                    }

                    var me    = ce.Object as MemberExpression;
                    var index = ((ConstantExpression)ce.Arguments[0]).Value;
                    sb.Insert(0, $".{me.Member.Name}[{index}]");
                    currentNode = me.Expression;
                }
                else
                {
                    var me = (currentNode as MemberExpression);
                    var mappingProperty =
                        me.Member.GetCustomAttribute(typeof(JsonPropertyAttribute)) as JsonPropertyAttribute;
                    var name = mappingProperty?.PropertyName ?? me.Member.Name;
                    sb.Insert(0, $".{name}");
                    currentNode = me.Expression;
                }
            }

            if (IncludeDbNames && currentNode is QuerySourceReferenceExpression sourceRef)
            {
                sb.Insert(0, $".{sourceRef.ReferencedQuerySource.ItemName}");
            }

            if (_currentMode == Mode.AllOperator)
            {
                sb.Remove(0, 1);
                CurrentExpression.Add(new[] { "?X", sb.ToString() });
            }
            else
            {
                CurrentExpression.Add(new[] { sb.ToString() });
            }

            return(node);
        }
Пример #6
0
 private void OnDeletePressCommandExecute(object p)
 {
     CurrentExpression.Delete();
     OnPropertyChanged("CurrentExpression");
 }
Пример #7
0
 private void OnClearPressCommandExecute(object p)
 {
     CurrentExpression.Clear();
     OnPropertyChanged("CurrentExpression");
 }
Пример #8
0
 private void OnButtonPressCommandExecute(object p)
 {
     CurrentExpression.AddChar(p);
     OnPropertyChanged("CurrentExpression");
 }
 private void HandleSequence(MethodCallExpression expression)
 {
     CurrentExpression.Add(new[] { "._sequence" });
 }
 private void HandleId(MethodCallExpression expression)
 {
     CurrentExpression.Add(new[] { "._id" });
 }