public void Test_FdbQueryUnionExpression()
        {
            var expr1 = FdbQueryIndexLookupExpression <int, string> .Lookup(
                FooBarIndex,
                (x) => x == "world"
                );

            var expr2 = FdbQueryIndexLookupExpression <int, long> .Lookup(
                FooBazIndex,
                (x) => x == 1234L
                );

            var expr = FdbQueryExpressions.Union(
                expr1,
                expr2
                );

            Log(expr);

            Assert.That(expr, Is.Not.Null);
            Assert.That(expr.Terms, Is.Not.Null);
            Assert.That(expr.Terms.Count, Is.EqualTo(2));
            Assert.That(expr.Terms[0], Is.SameAs(expr1));
            Assert.That(expr.Terms[1], Is.SameAs(expr2));

            Assert.That(expr.Type, Is.EqualTo(typeof(IAsyncEnumerable <int>)));
            Assert.That(expr.ElementType, Is.EqualTo(typeof(int)));

            Log(FdbQueryExpressions.ExplainSequence(expr));
        }
        public void Test_FdbQueryIndexLookupExpression_From_Lambda()
        {
            var expr = FdbQueryIndexLookupExpression <int, string> .Lookup(
                FooBarIndex,
                (bar) => bar == "world"
                );

            Log(expr);

            Assert.That(expr, Is.Not.Null);
            Assert.That(expr.Index, Is.SameAs(FooBarIndex));             //TODO: .Index.Index does not look very nice
            Assert.That(expr.Operator, Is.EqualTo(ExpressionType.Equal));
            Assert.That(expr.Value, Is.Not.Null);
            Assert.That(expr.Value, Is.InstanceOf <ConstantExpression>().With.Property("Value").EqualTo("world"));

            Assert.That(expr.Type, Is.EqualTo(typeof(IAsyncEnumerable <int>)));
            Assert.That(expr.ElementType, Is.EqualTo(typeof(int)));

            Log(FdbQueryExpressions.ExplainSequence(expr));
        }
예제 #3
0
        /// <summary>Creates a new query that will lookup specific values on this index</summary>
        public static IFdbAsyncSequenceQueryable <TId> Lookup <TId, TValue>(this IFdbIndexQueryable <TId, TValue> query, Expression <Func <TValue, bool> > predicate)
        {
            var expr = FdbQueryIndexLookupExpression <TId, TValue> .Lookup(query.Index, predicate);

            return(query.Provider.CreateSequenceQuery(expr));
        }