使用Mongo C#驱动程序返回IQueryable

时间:2018-08-22 13:19:23

标签: c# .net mongodb mongodb-.net-driver

我正在升级我的应用程序,以使用我所使用的1.9.2版的最新版本的Mongo C#驱动程序。

这是我使用1.9.2驱动程序的旧代码:

    public IQueryable<Address> SearchByDistance(double latitude, double longitude, double rangeInKm)
    {         
        var rangeInMeters = rangeInKm * 1000;
        var point = GeoJson.Point(GeoJson.Geographic(longitude, latitude)); //long, lat
        var clause = Query<Address>.Near(y => y.GeoPoint, point, rangeInMeters);
        var query = collection.AsQueryable().Where(x => clause.Inject());

        return query;
    }

上面是在我的DAL层-在我的服务层,然后我在返回的数据的配置中定义一个特定的数字,并对其进行ToList()并使用以下代码将其返回到UI:

results.Take(SearchResultLimit).ToList();

使用最新的驱动程序,我必须将DAL层的代码更新为以下代码:

    public IQueryable<Address> SearchByDistance(double latitude, double longitude, double rangeInKm)
    {         
        var rangeInMeters = rangeInKm * 1000;         
        var point = GeoJson.Point(GeoJson.Geographic(longitude, latitude)); //long, lat
        var filter = Builders<Address>.Filter.Near(y => y.GeoPoint, point, rangeInMeters);

        return collection.Find(filter).ToList().AsQueryable();
    }

上面的方法有效,但是我不喜欢加载整个集合以返回AsQueryable的方法-我知道我可以在DAL层更改方法签名并将Take移到DAL层,但是我想尽可能减少侵入性的代码。

我想知道是否有更好的方法在应用相同的过滤器定义时在DAL层返回IQueryable。

我尝试过:

return collection.AsQueryable().Where(filter);

但是对于Where子句使用此过滤器定义是不正确的。

0 个答案:

没有答案