MongoDB FilterDefinition& C#中的智能

时间:2016-02-01 13:30:10

标签: .net mongodb mongodb-query mongodb-.net-driver mongodb-csharp-2.0

我有以下空格FilterDefinition

var filter = Builders<MyDocument>
                .Filter
                .Near(x => x.Point, point, 1000);

有没有办法将其纳入IQueryable表达式?

例如,我可能有以下LINQ语句。我怎样才能包含上述条件?从我所看到的,没有LINQ支持空间查询。

return Database
    .GetCollection<Places>("Places")
    .AsQueryable()
    .Where(x => x.StartDate.Date <= date)
    .Where(x => x.EndDate.Date >= date)
    .Where(x => keys.Contains(selectedKeys))
    .ToList();

我正在使用新的2.2.2库。

2 个答案:

答案 0 :(得分:4)

.NET驱动程序jira项目中有一项功能请求:https://jira.mongodb.org/browse/CSHARP-1445。所以,目前答案是肯定的,但希望很快。

然而,有一个&#34; Where&#34; FilterDefinitionBuilder(https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver/FilterDefinitionBuilder.cs#L1286)上的方法,允许您将LINQ谓词包含在正常的查找/聚合查询中。

答案 1 :(得分:2)

从2.4开始,您可以使用Inject()来完成此操作。

请参阅:https://app.flourish.studio

在提供示例代码(略有更正)的情况下,将是:

var filter = Builders<Places>
                .Filter
                .Near(x => x.Point, point, 1000);

return Database
    .GetCollection<Places>("Places")
    .AsQueryable()
    .Where(x => x.StartDate.Date <= date)
    .Where(x => x.EndDate.Date >= date)
    .Where(x => keys.Contains(selectedKeys))
    .Where(x => filter.Inject())
    .ToList();