运行我的应用程序时,我必须写入使用的屏幕原始查询。
是否有任何方法/扩展方法可用,从中获得:
IQueryable alldata = hr.GetCollection"EventsReceiver").AsQueryable().Where(q => q.UserId == "123");
类似于:
db.EventsReceiver.find({ "userid" : "123" });
运行我的应用程序时,我必须写入使用的屏幕原始查询。
是否有任何方法/扩展方法可用,从中获得:
IQueryable alldata = hr.GetCollection"EventsReceiver").AsQueryable().Where(q => q.UserId == "123");
类似于:
db.EventsReceiver.find({ "userid" : "123" });
从 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;
}
}
对于任何有同样问题的人,我会在这里重新发布 Craig 在 github 上的答案:
var queryObject = ((IMongoQueryable)alldata).GetQueryObject();
这应该会返回用于生成查询的对象。