public Join(IMongoQueryable <BsonDocument> source1, IMongoQueryable <BsonDocument> source2, string source1OnField, string source2OnField, BsonDocument filter, List <KeyValuePair <string, string> > source1Projection, List <KeyValuePair <string, string> > source2Projection) { this.source1Projection = source1Projection; this.source2Projection = source2Projection; QueryDocument filterExp = new QueryDocument(filter); Data = source1.AsQueryable().Join(source2.AsQueryable(), o => o[source1OnField], inner => inner[source2OnField], (A, B) => new { A, B }) .Where(_ => ((FilterDefinition <BsonDocument>)filterExp).Inject()) .AsEnumerable() .Select(_ => Mapper(_.A, _.B)).ToList(); }