Ejemplo n.º 1
0
        internal bool ExtractLookupColumns(IDictionary <string, object> lookupColumns)
        {
            switch (_operator)
            {
            case ExpressionOperator.AND:
                var ok = _left.ExtractLookupColumns(lookupColumns);
                if (ok)
                {
                    ok = _right.ExtractLookupColumns(lookupColumns);
                }
                return(ok);

            case ExpressionOperator.EQ:
                var expr = _left;
                while (expr._conversionType != null)
                {
                    expr = expr._left;
                }
                if (!string.IsNullOrEmpty(expr.Reference))
                {
                    var key = expr.Reference.Split('.', '/').Last();
                    if (key != null && !lookupColumns.ContainsKey(key))
                    {
                        lookupColumns.Add(key, _right);
                    }
                }
                return(true);

            default:
                if (_conversionType != null)
                {
                    return(_left.ExtractLookupColumns(lookupColumns));
                }
                else
                {
                    return(false);
                }
            }
        }
        internal bool ExtractLookupColumns(IDictionary <string, object> lookupColumns)
        {
            switch (_operator)
            {
            case ExpressionType.And:
                var ok = _left.ExtractLookupColumns(lookupColumns);
                if (ok)
                {
                    ok = _right.ExtractLookupColumns(lookupColumns);
                }
                return(ok);

            case ExpressionType.Equal:
                var expr = this.IsValueConversion ? this : _left;
                while (expr.IsValueConversion)
                {
                    expr = expr.Value as ODataExpression;
                }
                if (!string.IsNullOrEmpty(expr.Reference))
                {
                    if (expr.Reference.IndexOfAny(_propertySeperator) >= 0)
                    {
                        //skip child entity - may result in false positives
                        return(false);
                    }
                    var key = expr.Reference;
                    if (key != null && !lookupColumns.ContainsKey(key))
                    {
                        lookupColumns.Add(key, _right);
                    }
                }
                return(true);

            default:
                if (this.IsValueConversion)
                {
                    return((this.Value as ODataExpression).ExtractLookupColumns(lookupColumns));
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 3
0
        private IDictionary <string, object> TryInterpretFilterExpressionAsKey(ODataExpression expression)
        {
            bool ok = false;
            IDictionary <string, object> namedKeyValues = new Dictionary <string, object>();

            if (!ReferenceEquals(expression, null))
            {
                ok = expression.ExtractLookupColumns(namedKeyValues);
            }
            if (!ok)
            {
                return(null);
            }

            var keyNames = _details.Session.Metadata.GetDeclaredKeyPropertyNames(this.EntityCollection.Name).ToList();

            return(keyNames.Count == namedKeyValues.Count && Utils.AllMatch(keyNames, namedKeyValues.Keys, _details.Session.Settings.NameMatchResolver)
                ? namedKeyValues
                : null);
        }
        internal bool ExtractLookupColumns(IDictionary <string, object> lookupColumns)
        {
            switch (_operator)
            {
            case ExpressionType.And:
                var ok = _left.ExtractLookupColumns(lookupColumns);
                if (ok)
                {
                    ok = _right.ExtractLookupColumns(lookupColumns);
                }
                return(ok);

            case ExpressionType.Equal:
                var expr = this.IsValueConversion ? this : _left;
                while (expr.IsValueConversion)
                {
                    expr = expr.Value as ODataExpression;
                }
                if (!string.IsNullOrEmpty(expr.Reference))
                {
                    var key = expr.Reference.Split('.', '/').Last();
                    if (key != null && !lookupColumns.ContainsKey(key))
                    {
                        lookupColumns.Add(key, _right);
                    }
                }
                return(true);

            default:
                if (this.IsValueConversion)
                {
                    return((this.Value as ODataExpression).ExtractLookupColumns(lookupColumns));
                }
                else
                {
                    return(false);
                }
            }
        }
        private IDictionary<string, object> TryInterpretFilterExpressionAsKey(ODataExpression expression)
        {
            bool ok = false;
            IDictionary<string, object> namedKeyValues = new Dictionary<string, object>();
            if (!ReferenceEquals(expression, null))
            {
                ok = expression.ExtractLookupColumns(namedKeyValues);
            }
            if (!ok)
                return null;

            var keyNames = _details.Session.Metadata.GetDeclaredKeyPropertyNames(this.EntityCollection.Name).ToList();
            return keyNames.Count == namedKeyValues.Count() && keyNames.All(namedKeyValues.ContainsKey)
                ? namedKeyValues
                : null;
        }