首页 > 解决方案 > 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

标签: c#.netmongodbmongodb-querymongodb-.net-driver

解决方案


使用以下代码进行操作:

    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();
    }

推荐阅读