2011-11-15 83 views

回答

0

對於有同樣的問題,我會在這裏重新發布在github上克雷格的回答人:

IQueryable alldata = hr.GetCollection"EventsReceiver").AsQueryable().Where(q => q.UserId == "123"); 

類似於:

var queryObject = ((IMongoQueryable)alldata).GetQueryObject(); 

這應該會讓您回到用於生成查詢的對象。

0

從FluentMongo v1.2.0.0開始,沒有公開的方式來公開查詢(很傷心)。這是一個骯髒的擴展方法來解決它。

但是由於這是使用反射來獲取非公衆成員,所以不要指望它將來一定會有效。

public static class MongoQueryableExtensions 
{ 
    public static BsonDocument GetMongoQuery<T>(this IQueryable<T> query) 
    { 
     if(query == null) throw new ArgumentNullException("query"); 
     Assembly fluentMongoAssembly = typeof(FluentMongo.Linq.MongoCollectionExtensions).Assembly; 
     Type mongoQueryableType = fluentMongoAssembly.GetType("FluentMongo.Linq.IMongoQueryable"); 

     BsonDocument queryDocument = null; 
     if(mongoQueryableType.IsAssignableFrom(query.GetType())) 
     { 
      MethodInfo m = mongoQueryableType.GetMethod("GetQueryObject"); 
      object queryObject = m.Invoke(query, null); 

      PropertyInfo queryProperty = fluentMongoAssembly.GetType("FluentMongo.Linq.MongoQueryObject").GetProperty("Query"); 
      queryDocument = (BsonDocument)queryProperty.GetValue(queryObject, null); 
     } 
     return queryDocument; 
    } 
} 
+0

是不是這樣的呢? http://stackoverflow.com/questions/10261156/translate-queryablet-back-to-imongoquery?lq=1 –

相關問題