Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MongoDB.NET异常:不支持的筛选器_C#_.net_Mongodb_Linq_Mongodb .net Driver - Fatal编程技术网

C# MongoDB.NET异常:不支持的筛选器

C# MongoDB.NET异常:不支持的筛选器,c#,.net,mongodb,linq,mongodb-.net-driver,C#,.net,Mongodb,Linq,Mongodb .net Driver,我目前正在使用mongodb的.NET包装器(有关版本,请参阅packages.config中的以下摘录): 我试图构建一个简单的过滤器,以获取位置的纬度和经度在LatitudeDelta和LongtudeDelta定义的特定限制范围内的项目 bool filterAll = string.IsNullOrEmpty(username) || username == "*"; var filter = Builders<Models.MapQuery>.Filter.Where

我目前正在使用mongodb的.NET包装器(有关版本,请参阅packages.config中的以下摘录):


我试图构建一个简单的过滤器,以获取位置的纬度和经度在LatitudeDelta和LongtudeDelta定义的特定限制范围内的项目

bool filterAll = string.IsNullOrEmpty(username) || username == "*";

var filter = Builders<Models.MapQuery>.Filter.Where(p => (filterAll || (username == p.CreatorUsername))
                && Math.Abs(p.PinLocation.Latitude - desiredLatitude) < latitudeDelta
                && Math.Abs(p.PinLocation.Longitude - desiredLongitude) < longitudeDelta);

var queries = await db.GetCollection<Models.MapQuery>(Constants.MAP_QUERY)
                    .Find(filter)
                    .ToListAsync();
bool filterAll=string.IsNullOrEmpty(username)| username==“*”;
var filter=Builders.filter.Where(p=>(filterAll | |(username==p.CreatorUsername))
&&Math.Abs(p.PinLocation.Latitude-desiredLatitude)
当程序执行“var querys”行时,它遇到一个异常,表示“Abs({PinLocation.Latitude}-3.209096”)不受支持。

如何修复上述异常?否则,如果上述问题无法解决,解决方法是什么?

这是否可行

var filter = Builders<Models.MapQuery>.Filter.And(
        Builders<Models.MapQuery>.Filter.Eq(p => p.username, username),
        Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Latitude - desiredLatitude), latitudeDelta),
        Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Longitude - desiredLongitude), longitudeDelta));
var filter=Builders.filter.And(
Builders.Filter.Eq(p=>p.username,username),
Builders.Filter.Lt(p=>Math.Abs(p.PinLocation.Latitude-desiredLatitude),latitudeDelta),
Lt(p=>Math.Abs(p.PinLocation.Longitude-desiredLongitude),longitudeDelta);
我更改了代码,使用内置API调用以提高可读性。我建议您在执行查询之前先进行检查

var filter = Builders<Models.MapQuery>.Filter.And(
        Builders<Models.MapQuery>.Filter.Eq(p => p.username, username),
        Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Latitude - desiredLatitude), latitudeDelta),
        Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Longitude - desiredLongitude), longitudeDelta));