コード例 #1
0
        /// <summary>
        /// Identifies conditions to include from a <see cref="WhereLinqExpression"/>.
        /// </summary>
        /// <param name="node">The binary expression to analyze.</param>
        /// <returns>The original binary expression.</returns>
        protected override Expression VisitBinary(BinaryExpression node)
        {
            switch (node.NodeType)
            {
            case ExpressionType.AndAlso:
            case ExpressionType.OrElse:
                Visit(node.Left);
                Visit(node.Right);
                return(node);

            default:
                var types = ExpressionSearcher.GetTypes(node);

                if (types.Contains(ExpressionType.AndAlso) || types.Contains(ExpressionType.OrElse))
                {
                    Visit(node.Left);
                    Visit(node.Right);
                    return(node);
                }
                else
                {
                    var visited = UnaryFixer.Fix(node);

                    Conditions.Add(visited);

                    return(node);
                }
            }
        }
コード例 #2
0
        protected void Execute(Expression <Func <Sensor, bool> > predicate, string url, ExpressionType nodeType)
        {
            var types = ExpressionSearcher.GetTypes(predicate);

            Assert.IsTrue(types.Any(t => t == nodeType), $"Did not have an expression of type {nodeType}. Types found: " + string.Join(", ", types));

            var urls = new[]
            {
                TestHelpers.RequestSensor(url)
            };

            var client = GetClient(urls.ToArray());

            var result = client.QuerySensors().Where(predicate).ToList();
        }
コード例 #3
0
        protected void Execute(Expression <Func <Sensor, bool> > predicate, string url, ExpressionType nodeType)
        {
            var types = ExpressionSearcher.GetTypes(predicate);

            Assert.IsTrue(types.Any(t => t == nodeType), $"Did not have an expression of type {nodeType}. Types found: " + string.Join(", ", types));

            var urls = new[]
            {
                UnitRequest.Sensors($"count=500" + (string.IsNullOrEmpty(url) ? url : $"&{url}"), UrlFlag.Columns)
            };

            var client = GetClient(urls.ToArray());

            var result = client.Item1.QuerySensors().Where(predicate).ToList();

            client.Item2.AssertFinished();
        }
コード例 #4
0
        private bool HasOnlyLegalExpressionTypes(Expression filter)
        {
            var types            = ExpressionSearcher.GetTypes(filter);
            var unsupportedTypes = types.Where(t => t == ExpressionType.ArrayLength || t == ExpressionType.Throw || t == ExpressionType.DebugInfo).ToList();

            if (unsupportedTypes.Count > 0)
            {
                Logger.Log("Expression contains an illegal expression node(s) " + string.Join(", ", unsupportedTypes) + ". Ignoring filter.", Indentation.Six);

                if (strict)
                {
                    throw Error.UnsupportedExpressionType(unsupportedTypes, filter);
                }

                return(false);
            }

            return(true);
        }