c# - LinqToMongo 注入
问题描述
我有一个使用 MongoDB 的 .NET 应用程序,所以我使用的是 Mongo C# 驱动程序。
我目前使用的驱动程序版本是 1.9.2,我的应用程序中的所有内容都按预期工作。但是,我正在尝试将 Mongo 驱动程序升级到最新版本 2.7.0,但是我在使某些事情正常工作时遇到了一些问题。
下面的代码片段是我面临最新版本驱动程序问题的地方
public IQueryable<Location> SearchByLocationDistance(double latitude, double longitude, double rangeInKm)
{
var rangeInMeters = rangeInKm * 1000;
var point = GeoJson.Point(GeoJson.Geographic(longitude, latitude));
var locationClause = Query<Location>.Near(y => y.Address.GeoPoint, point, rangeInMeters);
var query = collection.AsQueryable().Where(x => locationClause.Inject());
return query;
}
我得到的错误信息是:
LinqToMongo.Inject 方法仅用于 LINQ Where 子句。
做一些研究,它看起来像一个修复已签入 - https://jira.mongodb.org/browse/CSHARP-1445
但是我不确定是否需要使用新语法来实现相同的功能。
我尝试如下更改我的代码:
var filter = Builders<Location>.Filter.Near(y => y.Address.GeoPoint, point, rangeInMeters);
var query = collection.AsQueryable().Where(x => x.filter.Inject());
但是使用该代码,我会收到一条不同的错误消息- $match 聚合中不允许使用 $near
解决方案
使用以下代码进行操作:
public IQueryable<Location> SearchByLocationDistance(double latitude, double longitude, double rangeInKm)
{
var rangeInMeters = rangeInKm * 1000;
var point = GeoJson.Point(GeoJson.Geographic(longitude, latitude)); //long, lat
var filter = Builders<Location>.Filter.Near(y => y.Address.GeoPoint, point, rangeInMeters);
return collection.Find(filter).ToList().AsQueryable();
}