Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-3873

Implement Invoke() to allow for dynamic predicate creation.

    XMLWordPrintableJSON

Details

    • Icon: New Feature New Feature
    • Resolution: Unresolved
    • Icon: Unknown Unknown
    • None
    • None
    • LINQ3
    • None

    Description

      Using the PredicateBuilder class as discussed here:
      http://www.albahari.com/nutshell/predicatebuilder.aspx

      When using the expression built by PredicateBuilder, which in this case is of type 

      Expression<Func<Product, bool>>

      to .Find() or to AsQueryable().Where():

      I get the error

      System.ArgumentException: Unsupported filter: Invoke(product => (product.FriendlyName.ToUpperInvariant() == "GOLF COURSES"), \{document}).
       at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
       at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateAndAlso(BinaryExpression node)
       at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
       at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateTake(TakeExpression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node)
       at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
       at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Translate(Expression expression)
       at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
       at MongoDB.Driver.Linq.MongoQueryable.FirstOrDefaultAsync[TSource](IMongoQueryable`1 source, CancellationToken cancellationToken)
      

      I am attempting to implement dynamic, nested OR predicates as mentioned in that article.

      Attachments

        Activity

          People

            Unassigned Unassigned
            richard.collette@gmail.com Richard Collette
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: