// constructors /// <summary> /// Initializes a new instance of the MongoQueryable class. /// </summary> /// <param name="provider">The query provider.</param> public SequoiaQueryable(SequoiaQueryProvider provider) { if (provider == null) { throw new ArgumentNullException("provider"); } _provider = provider; _expression = Expression.Constant(this); }
/// <summary> /// Translate a MongoDB LINQ query. /// </summary> /// <param name="provider">The MongoDB query provider.</param> /// <param name="expression">The LINQ query expression.</param> /// <returns>A TranslatedQuery.</returns> public static TranslatedQuery Translate(SequoiaQueryProvider provider, Expression expression) { expression = PartialEvaluator.Evaluate(expression, provider); expression = ExpressionNormalizer.Normalize(expression); // assume for now it's a SelectQuery var documentType = GetDocumentType(expression); var selectQuery = new SelectQuery(provider.Collection, documentType); selectQuery.Translate(expression); return(selectQuery); }
/// <summary> /// Initializes a new instance of the MongoQueryable class. /// </summary> /// <param name="provider">The query provider.</param> /// <param name="expression">The expression.</param> public SequoiaQueryable(SequoiaQueryProvider provider, Expression expression) { if (provider == null) { throw new ArgumentNullException("provider"); } if (expression == null) { throw new ArgumentNullException("expression"); } if (!typeof(IQueryable <T>).IsAssignableFrom(expression.Type)) { throw new ArgumentOutOfRangeException("expression"); } _provider = provider; _expression = expression; }
/// <summary> /// Returns an instance of IQueryable{{T}} for a MongoCollection. /// </summary> /// <typeparam name="T">The type of the returned documents.</typeparam> /// <param name="collection">The name of the collection.</param> /// <returns>An instance of IQueryable{{T}} for a MongoCollection.</returns> public static IQueryable <T> AsQueryable <T>(this DBCollection <T> collection) { var provider = new SequoiaQueryProvider(collection); return(new SequoiaQueryable <T>(provider)); }