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)); }
/// <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)); }