MongoDB C# 中的 FilterDefinition 和 IQueryable
MongoDB FilterDefinition & IQueryable in C#
我有以下空间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 库。
.NET 驱动程序 jira 项目中有一个功能请求:https://jira.mongodb.org/browse/CSHARP-1445。所以,目前答案是否定的,但希望很快。
但是,FilterDefinitionBuilder (https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver/FilterDefinitionBuilder.cs#L1286) 上有一个 "Where" 方法,允许您将 LINQ 谓词包含到正常的 find/aggregation 查询中。
从 2.4 开始,您可以使用 Inject()
来完成此操作。
根据提供的示例代码(稍作更正),这将是:
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();
我有以下空间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 库。
.NET 驱动程序 jira 项目中有一个功能请求:https://jira.mongodb.org/browse/CSHARP-1445。所以,目前答案是否定的,但希望很快。
但是,FilterDefinitionBuilder (https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver/FilterDefinitionBuilder.cs#L1286) 上有一个 "Where" 方法,允许您将 LINQ 谓词包含到正常的 find/aggregation 查询中。
从 2.4 开始,您可以使用 Inject()
来完成此操作。
根据提供的示例代码(稍作更正),这将是:
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();