将Queryable <T>转换回IMongoQuery

Vla*_*nko 9 c# linq mongodb

请考虑以下代码

var q = from e in myCollection.AsQueryable<Entity>() where e.Name == "test" select e;
Run Code Online (Sandbox Code Playgroud)

实际的查询非常复杂,我不喜欢使用QueryBuilder而不是LINQ来构建它.

所以我想将它转换回IMongoQuery以在myCollection.Group()调用中使用,因为没有通过LINQ支持GroupBy.

可能吗?

Rob*_*tam 18

编辑答案:

我意识到已经有一种官方方法可以从LINQ查询中获取Mongo查询(我应该知道!).您必须将IQueryable <T>向下转换为MongoQueryable <T>才能访问GetMongoQuery方法:

var linqQuery = from e in collection.AsQueryable<Entity>() where e.Name == "test" select e;
var mongoQuery = ((MongoQueryable<Entity>)linqQuery).GetMongoQuery();
Run Code Online (Sandbox Code Playgroud)

原始答案:

目前还没有官方支持的方法,但在不久的将来,我们打算让我们很容易找到LINQ查询被映射到的MongoDB查询.

在短期内,您可以使用以下未记录的内部方法来找出LINQ查询映射到的MongoDB查询:

var linqQuery = from e in collection.AsQueryable<Entity>() where e.Name == "test" select e;
var translatedQuery = (SelectQuery)MongoQueryTranslator.Translate(linqQuery);
var mongoQuery = translatedQuery.BuildQuery();
Run Code Online (Sandbox Code Playgroud)

但在某些时候,您可能需要从这些未记录的方法切换到官方支持的方法(未记录的方法可能会在将来更改或重命名).