Пример #1
0
        /// <summary>
        ///     Expression construction
        /// </summary>
        internal Expression(ExpressionMode mode) 
        {
            _flags = 0; 
 
            switch(mode)
            { 
                case ExpressionMode.None:
                    break;

                case ExpressionMode.NonSharable: 
                    _flags |= InternalFlags.NonShareable;
                    break; 
 
                case ExpressionMode.ForwardsInvalidations:
                    _flags |= InternalFlags.ForwardsInvalidations; 
                    _flags |= InternalFlags.NonShareable;
                    break;

                case ExpressionMode.SupportsUnboundSources: 
                    _flags |= InternalFlags.ForwardsInvalidations;
                    _flags |= InternalFlags.NonShareable; 
                    _flags |= InternalFlags.SupportsUnboundSources; 
                    break;
 
                default:
                    throw new ArgumentException(SR.Get(SRID.UnknownExpressionMode));
            }
        } 
Пример #2
0
        /// <summary>
        ///     Expression construction
        /// </summary>
        internal Expression(ExpressionMode mode)
        {
            _flags = 0;

            switch (mode)
            {
            case ExpressionMode.None:
                break;

            case ExpressionMode.NonSharable:
                _flags |= InternalFlags.NonShareable;
                break;

            case ExpressionMode.ForwardsInvalidations:
                _flags |= InternalFlags.ForwardsInvalidations;
                _flags |= InternalFlags.NonShareable;
                break;

            case ExpressionMode.SupportsUnboundSources:
                _flags |= InternalFlags.ForwardsInvalidations;
                _flags |= InternalFlags.NonShareable;
                _flags |= InternalFlags.SupportsUnboundSources;
                break;

            default:
                throw new ArgumentException(SR.Get(SRID.UnknownExpressionMode));
            }
        }
Пример #3
0
 /// <summary>
 /// Where(WhereRelation,ExpressionMode,ExpressionRelation,object,object,object) 构造函数
 /// </summary>
 /// <param name="_whereRelation">与前条件关系</param>
 /// <param name="_expressionMode">表达式模式</param>
 /// <param name="_expressionRelation">表达式关系</param>
 /// <param name="_field1">字段1的内容</param>
 /// <param name="_field2">字段2的内容</param>
 /// <param name="_field3">字段3的内容</param>
 public Where(WhereRelation _whereRelation, ExpressionMode _expressionMode, ExpressionRelation _expressionRelation, object _field1, object _field2, object _field3)
 {
     this.WhereRelation      = _whereRelation;
     this.ExpressionMode     = _expressionMode;
     this.ExpressionRelation = _expressionRelation;
     this.Field1             = _field1;
     this.Field2             = _field2;
     this.Field3             = _field3;
     this.HasSubWhere        = false;
     this.Wheres             = new WhereCollection();
 }
Пример #4
0
            public ExpressionMode mExpressionMode;      // symbol rendering mode

            // Deserialization helper.
            public static ExpressionMode ParseExpressionMode(string str)
            {
                ExpressionMode em = ExpressionMode.Common;

                if (!string.IsNullOrEmpty(str))
                {
                    if (Enum.TryParse <ExpressionMode>(str, out ExpressionMode pem))
                    {
                        em = pem;
                    }
                }
                return(em);
            }
Пример #5
0
        public object ValidationModeTesting(string expression)
        {
            var result = (object)null;

            using (ExpressionMode.BeginValidationMode())
            {
                Assert.IsTrue(ExpressionMode.IsValidationMode, "Validation mode should be enabled");

                result = Factory.Instance.Create().Compile(expression).EvalValue(null);
            }
            Assert.IsFalse(ExpressionMode.IsValidationMode, "Validation mode should be disabled");

            return(result);
        }
Пример #6
0
        public FragmentMatcher(
            int id,
            string name,
            PatternMatcher start          = default,
            PatternMatcher end            = default,
            IList <IMatcher> parts        = default,
            PatternMatcher partsDelimiter = default,
            bool partsDelimiterRequired   = true,
            PatternMatcher partsPadding   = default,
            int?minMatchedParts           = default,
            MatchMode partsMatchMode      = default,
            bool isNoise     = default,
            bool fallThrough = default,
            bool cacheable   = default,
            bool clearCache  = default,
            ExpressionMode expressionMode = default,
            int?expressionOrder           = default,
            bool boundsAsParts            = default,
            bool discardBounds            = default,
            bool negate = default
            )
        {
            Id                     = id;
            Name                   = name;
            Start                  = start;
            End                    = end;
            Parts                  = parts ?? new List <IMatcher>();
            PartsDelimiter         = partsDelimiter;
            PartsDelimiterRequired = partsDelimiterRequired;
            PartsPadding           = partsPadding;
            MinMatchedParts        = minMatchedParts;
            PartsMatchMode         = partsMatchMode;
            IsNoise                = isNoise;
            FallThrough            = fallThrough;
            Cacheable              = cacheable;
            ClearCache             = clearCache;
            ExpressionMode         = expressionMode;
            ExpressionOrder        = expressionOrder;
            BoundsAsParts          = boundsAsParts;
            DiscardBounds          = discardBounds;
            Negate                 = negate;

            _hashCode = name.GetHashCode();
        }
Пример #7
0
        protected void ConvertToExpressionTree(FragmentMatchData matchData, ExpressionMode expressionMode)
        {
            IMatchData rootPart = matchData.Parts.ElementAtOrDefault(0);

            switch (expressionMode)
            {
            case ExpressionMode.BinaryTree:
                rootPart = ConvertToBinaryTree(matchData, rootPart);
                break;

            case ExpressionMode.LikeNameTree:
                rootPart = ConvertToLikeNameTree(matchData, rootPart);
                break;
            }
            matchData.Parts.Clear();
            if (rootPart != null)
            {
                matchData.Parts.Add(rootPart);
            }
        }
Пример #8
0
        internal Expression(ExpressionMode mode)
        {
            this.flags = Expression.InternalFlags.None;
            switch (mode)
            {
            case ExpressionMode.None:
            {
                return;
            }

            case ExpressionMode.NonSharable:
            {
                Expression expression = this;
                expression.flags = expression.flags | Expression.InternalFlags.NonShareable;
                return;
            }

            case ExpressionMode.ForwardsInvalidations:
            {
                Expression expression1 = this;
                expression1.flags = expression1.flags | Expression.InternalFlags.ForwardsInvalidations;
                Expression expression2 = this;
                expression2.flags = expression2.flags | Expression.InternalFlags.NonShareable;
                return;
            }

            case ExpressionMode.SupportsUnboundSources:
            {
                Expression expression3 = this;
                expression3.flags = expression3.flags | Expression.InternalFlags.ForwardsInvalidations;
                Expression expression4 = this;
                expression4.flags = expression4.flags | Expression.InternalFlags.NonShareable;
                Expression expression5 = this;
                expression5.flags = expression5.flags | Expression.InternalFlags.SupportsUnboundSources;
                return;
            }
            }
            throw new ArgumentException("UnknownExpressionMode");
        }
Пример #9
0
            /// <summary>
            /// initializes this expression holder
            /// </summary>
            /// <param name="expression">the expression that is being parsed</param>
            /// <param name="mode">the parsing mode of the expression</param>
            public ExpressionCompiler(string expression, ExpressionMode mode)
            {
                var lex = new ITVScriptingLexer(new AntlrInputStream(expression));

                parser = new ITVScriptingParser(new CommonTokenStream(lex));
                parser.RemoveErrorListeners();
                parser.AddErrorListener(listener);
                //parser.ErrorHandler = new BailErrorStrategy();
                object obj;

                if (mode == ExpressionMode.Expression)
                {
                    obj = SingleExpression;
                }
                else
                {
                    obj = Program;
                }

                Successful  = parser.NumberOfSyntaxErrors == 0;
                SuspectLine = listener.SuspectLine;
                Errors      = listener.GetAllErrors();
            }
Пример #10
0
        public string Generate(MatcherEngineGenerator generator)
        {
            string methodName = $"MatchFragment{GetSafeMethodName(Name)}";
            string method     = $"{methodName}(ref state, matchData)";

            if (!generator.TryGetMethod(methodName, ref method))
            {
                generator.Add(methodName, method);
                string code = $@"private bool {methodName}(ref State state, FragmentMatchData matchData)
        {{
            {(generator.LanguageMatcher.LogMatches ? $@"int currentId = ++state.Id;
            state.MatchLogBuilder.AppendLine($""{{new String('\t', currentId)}} {{state.CurrentIndex}}. Try: {GetEscapedName()}"");" : null)}
			bool success = false;
			FragmentMatchData partMatcherData = null;
			{(Cacheable ? $@"if (!state.MatchCache.TryGetValue(new ValueTuple<string, int>(""{GetEscapedName()}"", state.CurrentIndex), out partMatcherData))
			{{" : null)}
				int startIndex = state.CurrentIndex;
				int distinctIndex = state.DistinctIndex;
				partMatcherData = new FragmentMatchData
				{{
					Name = ""{GetEscapedName()}"",
					StartIndex = state.CurrentIndex{(ExpressionOrder != null ? $@",
					ExpressionOrder = {ExpressionOrder}" : null)}
				}};

				{(Start != null ? $"StringMatchData startMatchData;" : null)}
				{(End != null ? $"StringMatchData endMatchData;" : null)}
				success = ({(Start != null ? $"{string.Format(GenerateMatchFragmentBounds(generator, Start), DiscardBounds.ToString().ToLower(), "startMatchData")} && " : null)}{GenerateMatchFragmentParts(generator)}{(End != null ? $" && {string.Format(GenerateMatchFragmentBounds(generator, End), DiscardBounds.ToString().ToLower(), "endMatchData")}" : null)});
				
				
				if (success)
				{{
					{(!Negate ? $@"partMatcherData.Length = state.CurrentIndex - partMatcherData.StartIndex;
					partMatcherData.EndDistinctIndex = state.DistinctIndex;" : null)}
					{(Cacheable ? $@"state.MatchCache[new ValueTuple<string, int>(""{GetEscapedName()}"", startIndex)] = partMatcherData;" : null)}
					{(!IsNoise && ExpressionMode != ExpressionMode.None && !Negate ? $"ConvertToExpressionTree(partMatcherData, ExpressionMode.{ExpressionMode.ToString()});" : null)}
					{(BoundsAsParts && Start != null && !Negate ? $@"if (startMatchData != null)
					{{
						partMatcherData.Parts.Insert(0, startMatchData);
					}}" : null)}
					{(BoundsAsParts && End != null && !Negate ? $@"if (endMatchData != null)
					{{
						partMatcherData.Parts.Add(endMatchData);
					}}" : null)}
				}}
				else
				{{
					{(Cacheable ? $@"state.MatchCache[new ValueTuple<string, int>(""{GetEscapedName()}"", startIndex)] = null;" : null)}
					{(!Negate ? $@"state.CurrentIndex = startIndex;
					state.DistinctIndex = distinctIndex;" : null)}
				}}
				{(Negate ? $@"state.CurrentIndex = startIndex;
				state.DistinctIndex = distinctIndex;" : null)}
			{(Cacheable ? $@"}}" : null)}
			{(Cacheable && !Negate ? $@"else if (success = partMatcherData != null)
			{{
				state.CurrentIndex = partMatcherData.StartIndex + partMatcherData.Length;
				state.DistinctIndex = partMatcherData.EndDistinctIndex;
			}}" : null)}
            {(!Negate ? $@"if (success)
            {{
				{(!IsNoise && FallThrough ? "matchData.Parts.AddRange(partMatcherData.Parts);" : null)}
				{(!IsNoise && !FallThrough ? "matchData.Parts.Add(partMatcherData);" : null)}
				{(ClearCache ? "state.MatchCache.Clear();" : null)}
			}}" : null)}
            {(generator.LanguageMatcher.LogMatches ? $@"state.MatchLogBuilder.AppendLine($""{{new String('\t', currentId)}} {{state.CurrentIndex}}. {{({(Negate ? "!" : null)}success ? ""Passed"" : ""Failed"")}}: {GetEscapedName()}"");
            state.Id = currentId - 1;" : null)}
            return {(Negate ? "!" : null)}success;
        }}";
                method = generator.Add(method, methodName, code);
            }
            return(method);
        }
Пример #11
0
        private string GetExpression(ExpressionMode _expressionMode, ExpressionRelation _expressionRelation, object _fieldObject1, object _fieldObject2, object _fieldObject3, ref SqlCommand _sqlCommand, Random _random)
        {
            string _return = "";
            string _field1 = _fieldObject1 == null ? "" : _fieldObject1.ToString();
            string _field2 = _fieldObject2 == null ? "" : _fieldObject2.ToString();
            string _field3 = _fieldObject3 == null ? "" : _fieldObject3.ToString();

            if (_expressionRelation != ExpressionRelation.Custom)
            {
                switch (_expressionMode)
                {
                case ExpressionMode.FieldVsField:
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _field2 = "[" + _field2.Replace(".", "].[") + "]";
                    _field3 = "[" + _field3.Replace(".", "].[") + "]";
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.FieldVsFieldVsField:
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _field2 = "[" + _field2.Replace(".", "].[") + "]";
                    _field3 = "[" + _field3.Replace(".", "].[") + "]";
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.FieldVsFieldVsValue:
                    _field3 = "@" + _field1.Replace(".", "_") + _random.Next().ToString();
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _field2 = "[" + _field2.Replace(".", "].[") + "]";
                    _sqlCommand.Parameters.AddWithValue(_field3, _fieldObject3);
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.FieldVsValue:
                    _field2 = "@" + _field1.Replace(".", "_") + _random.Next().ToString();
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _field3 = "[" + _field1.Replace(".", "].[") + "]";
                    if (_expressionRelation == ExpressionRelation.Like)
                    {
                        SqlParameter _sqlParameter = new SqlParameter(_field2, SqlDbType.NVarChar);
                        _sqlParameter.Value = _fieldObject2;
                        _sqlCommand.Parameters.Add(_sqlParameter);
                    }
                    else if (_expressionRelation == ExpressionRelation.In || _expressionRelation == ExpressionRelation.NotIn)
                    {
                        object[] _array       = (object[])_fieldObject2;
                        string   _field2Value = "";
                        foreach (object _value in _array)
                        {
                            _field2Value += _field2Value == "" ? "" : ",";
                            string _field2Name = _field2 + _random.Next().ToString();
                            _field2Value += _field2Name;
                            _sqlCommand.Parameters.AddWithValue(_field2Name, _value);
                        }
                        _field2 = _field2Value;
                    }
                    else if (_fieldObject2.GetType() == Guid.NewGuid().GetType())
                    {
                        SqlParameter _sqlParameter = new SqlParameter(_field2, SqlDbType.UniqueIdentifier);
                        _sqlParameter.Value = _fieldObject2;
                        _sqlCommand.Parameters.Add(_sqlParameter);
                    }
                    else
                    {
                        _sqlCommand.Parameters.AddWithValue(_field2, _fieldObject2);
                    }
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.FieldVsValueVsField:
                    _field2 = "@" + _field1.Replace(".", "_") + _random.Next().ToString();
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _field3 = "[" + _field1.Replace(".", "].[") + "]";
                    _sqlCommand.Parameters.AddWithValue(_field2, _fieldObject2);
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.FieldVsValueVsValue:
                    _field2 = "@" + _field1.Replace(".", "_") + "1" + _random.Next().ToString();
                    _field3 = "@" + _field1.Replace(".", "_") + "2" + _random.Next().ToString();
                    _field1 = "[" + _field1.Replace(".", "].[") + "]";
                    _sqlCommand.Parameters.AddWithValue(_field2, _fieldObject2);
                    _sqlCommand.Parameters.AddWithValue(_field3, _fieldObject3);
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.ValueVsValueVsValue:
                    _field1 = "@" + _field1.Replace(".", "_") + "1" + _random.Next().ToString();
                    _field2 = "@" + _field1.Replace(".", "_") + "2" + _random.Next().ToString();
                    _field3 = "@" + _field1.Replace(".", "_") + "3" + _random.Next().ToString();
                    _sqlCommand.Parameters.AddWithValue(_field1, _fieldObject1);
                    _sqlCommand.Parameters.AddWithValue(_field2, _fieldObject2);
                    _sqlCommand.Parameters.AddWithValue(_field3, _fieldObject3);
                    _return = GetExpresstionString(_expressionRelation, _field1, _field2, _field3);
                    break;

                case ExpressionMode.Custom:
                    _field1 = _fieldObject1.ToString();
                    _field2 = "";
                    _field3 = "";
                    _return = " " + _field1;
                    break;
                }
            }
            else
            {
                _return = _fieldObject1.ToString();
            }
            return(_return);
        }
Пример #12
0
 /// <summary>
 /// Creates a new expression.
 /// </summary>
 /// <param name="conn">The conn.</param>
 /// <param name="classDef">The class def.</param>
 /// <param name="mode">The mode.</param>
 /// <returns></returns>
 public static string NewExpression(FdoConnection conn, ClassDefinition classDef, Dictionary<string, ClassDefinition> aliasedClasses, ExpressionMode mode)
 {
     ExpressionEditor dlg = new ExpressionEditor(conn, classDef, aliasedClasses, mode);
     if (dlg.ShowDialog() == DialogResult.OK)
     {
         return dlg.txtExpression.Text.Trim();
     }
     return null;
 }
Пример #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionEditor"/> class.
 /// </summary>
 /// <param name="conn">The conn.</param>
 /// <param name="classDef">The class def.</param>
 /// <param name="mode">The mode.</param>
 internal ExpressionEditor(FdoConnection conn, ClassDefinition classDef, Dictionary<string, ClassDefinition> aliasedClasses, ExpressionMode mode)
     : this()
 {
     _conn = conn;
     _ClassDef = classDef;
     _aliasedClasses = aliasedClasses ?? new Dictionary<string, ClassDefinition>();
     _ExprMode = mode;
 }
Пример #14
0
 internal ExpressionEditor()
 {
     InitializeComponent();
     InitAutoComplete();
     _FunctionMenuItems = new Dictionary<FunctionCategoryType, ToolStripMenuItem>();
     _ExprMode = ExpressionMode.Filter;
     this.Text = ResourceService.GetString("TITLE_EXPRESSION_EDITOR");
 }
Пример #15
0
        private void Add(WhereRelation _relation, object[] _values)
        {
            bool[] _fields = new bool[_values.Length];
            for (int i = 0; i < _fields.Length; i++)
            {
                _fields[i] = _values[i].GetType() == typeof(string) && Regex.IsMatch(_values[i].ToString(), @"\[.+\]");
                if (_fields[i])
                {
                    _values[i] = _values[i].ToString().Substring(1, _values[i].ToString().Length - 2);
                }
            }

            switch (_values.Length)
            {
            case 1:
                #region 1 自定义条件(string) or 是否有自条件(bool) or 条件对象(Condition)
            {
                if (_values[0].GetType() == typeof(Where))
                {
                    base.Add((Where)_values[0]);
                }
                else if (_values[0].GetType() == typeof(bool))
                {
                    base.Add(new Where(_relation, (bool)_values[0]));
                }
                else
                {
                    base.Add(new Where(_relation, _values[0].ToString()));
                }
                break;
            }

                #endregion
            case 2:
                #region 2 单一字段条件 NULL,NOTNULL
            {
                switch (_values[1].ToString())
                {
                case "NULL": base.Add(new Where(_relation, ExpressionMode.FieldVsField, ExpressionRelation.Null, _values[0])); break;

                case "NOTNULL": base.Add(new Where(_relation, ExpressionMode.FieldVsField, ExpressionRelation.NotNull, _values[0])); break;
                }
                break;
            }

                #endregion
            case 3:
                #region 3 两个字段条件 =,<>,>,>=,<,<=,LIKE,NOTLIKE,IN,NOTIN
            {
                ExpressionMode _mode = _fields[2] ? ExpressionMode.FieldVsField : ExpressionMode.FieldVsValue;
                switch (_values[1].ToString())
                {
                case "=": base.Add(new Where(_relation, _mode, ExpressionRelation.Equal, _values[0], _values[2])); break;

                case "<>": base.Add(new Where(_relation, _mode, ExpressionRelation.NotEqual, _values[0], _values[2])); break;

                case ">": base.Add(new Where(_relation, _mode, ExpressionRelation.MoreThen, _values[0], _values[2])); break;

                case ">=": base.Add(new Where(_relation, _mode, ExpressionRelation.MoreEqualThen, _values[0], _values[2])); break;

                case "<": base.Add(new Where(_relation, _mode, ExpressionRelation.LessThen, _values[0], _values[2])); break;

                case "<=": base.Add(new Where(_relation, _mode, ExpressionRelation.LessEqualThen, _values[0], _values[2])); break;

                case "LIKE": base.Add(new Where(_relation, _mode, ExpressionRelation.Like, _values[0], _values[2])); break;

                case "NOTLIKE": base.Add(new Where(_relation, _mode, ExpressionRelation.NotLike, _values[0], _values[2])); break;

                case "IN":
                    #region IN
                {
                    object[] _valueList;
                    if (_values[2].GetType() == typeof(Array) || _values[2].GetType().BaseType == typeof(Array))
                    {
                        List <object> _objects = new List <object>();
                        Array         _array   = (Array)_values[2];
                        for (int i = 0; i < _array.Length; i++)
                        {
                            _objects.Add(_array.GetValue(i));
                        }
                        _valueList = _objects.ToArray();
                    }
                    else
                    {
                        _valueList = new object[] { _values[2] };
                    }
                    base.Add(new Where(_relation, ExpressionMode.FieldVsValue, ExpressionRelation.In, _values[0], _valueList));
                    break;
                }

                    #endregion
                case "NOTIN":
                    #region NOTIN
                {
                    object[] _valueList;
                    if (_values[2].GetType() == typeof(Array) || _values[2].GetType().BaseType == typeof(Array))
                    {
                        _valueList = (object[])_values[2];
                    }
                    else
                    {
                        _valueList = new object[] { _values[2] };
                    }
                    base.Add(new Where(_relation, ExpressionMode.FieldVsValue, ExpressionRelation.NotIn, _values[0], _valueList));
                    break;
                }
                    #endregion
                }
                break;
            }

                #endregion
            default:
                #region  个以上字段条件 BETWEEN,NOTBETWEEN,IN,NOTIN
            {
                if ((_values[1].ToString() == "BETWEEN" || _values[1].ToString() == "NOTBETWEEN") && _fields.Length == 4)
                {
                    ExpressionRelation _expressRelation = _values[1].ToString() == "BETWEEN" ? ExpressionRelation.Between : ExpressionRelation.NotBetween;
                    ExpressionMode     _mode            = ExpressionMode.FieldVsValueVsValue;
                    if (_fields[2] && _fields[3])
                    {
                        _mode = ExpressionMode.FieldVsFieldVsField;
                    }
                    if (_fields[2] && !_fields[3])
                    {
                        _mode = ExpressionMode.FieldVsFieldVsValue;
                    }
                    if (!_fields[2] && _fields[3])
                    {
                        _mode = ExpressionMode.FieldVsValueVsField;
                    }
                    if (!_fields[2] && !_fields[3])
                    {
                        _mode = ExpressionMode.FieldVsValueVsValue;
                    }
                    base.Add(new Where(_relation, _mode, _expressRelation, _values[0], _values[2], _values[3]));
                }
                else if (_values[1].ToString() == "IN" || _values[1].ToString() == "NOTIN")
                {
                    ExpressionRelation _expressRelation = _values[1].ToString() == "IN" ? ExpressionRelation.In : ExpressionRelation.NotIn;
                    if (_values[2] is Array)
                    {
                        base.Add(new Where(_relation, ExpressionMode.FieldVsValue, _expressRelation, _values[0], _values[2]));
                    }
                    else
                    {
                        object[] _valueList = new object[_values.Length - 2];
                        Array.Copy(_values, 2, _valueList, 0, _valueList.Length);
                        base.Add(new Where(_relation, ExpressionMode.FieldVsValue, _expressRelation, _values[0], _valueList));
                    }
                }
                break;
            }
                #endregion
            }
        }
Пример #16
0
 public ExpressionBase(ExpressionMode mode)
     : base((System.Windows.ExpressionMode)mode)
 {
 }