Linq 中的 DocumentDb 空间距离 returns 奇怪的结果

DocumentDb Spatial Distance in Linq returns weird result

当我在两个相同的点 (Microsoft.Azure.Documents.Spatial) 上执行 documentdb linq 距离查询时,我得到了不同的结果。

下面测试 returns 一个包含一个 LocationDocument 的列表。 test2 returns returns 一个空列表。 isEqual bool return 是真的,所以我不明白为什么它们 return 会产生不同的结果。我手动确认经度和纬度也相同。

// one document
var test = MyCollectionRepository<LocationDocument>
           .GetItems(x => x.Point.Distance(x.Point) < radius)
           .ToList();   

// no documents
var test2 = MyCollectionRepository<LocationDocumentDocument>
            .GetItems(x => x.Point.Distance(point) < radius)
            .ToList();

// true
bool isEqual = point.Equals(test[0].Point);

这是从存储库调用的 GetItems() 方法:

public static IReadOnlyCollection<T> GetItems(Expression<Func<T, bool>> predicate)
{
    var items = Client.CreateDocumentQuery<T>(Collection.DocumentsLink)
        .Where(predicate)
        .ToList();
    return items;
}

有人知道为什么会这样吗?这不是最容易调试的事情,因为距离调用仅在 运行 作为 documentdb 中的查询时可用。

提前致谢。

点Object:

point.Position.Latitude.ToString(); //18.4239
test[0].Point.Position.Latitude.ToString(); //18.4239

point.Position.Longitude.ToString(); //-33.9253
test[0].Position.Longitude.ToString(); //-33.9253

已编辑:

我已经更新到最新版本的Microsoft.Azure.DocumentDB库(1.4.1),问题有所改变。如评论中所述,问题似乎出在我的 CultureInfo 设置上。我处于 non-US 文化中(准确地说是 en-ZA)。

test2 然后抛出异常,而 test1 仍在输出预期结果。我得到一个 AggregateException。然后我只需要将查询中的启用扫描添加到 header。以下是您的操作方法:

public static IReadOnlyCollection<T> GetItems(Expression<Func<T, bool>> predicate)
{
    var items = Client.CreateDocumentQuery<T>(Collection.DocumentsLink, new FeedOptions { EnableScanInQuery = true })
        .Where(predicate)
        .ToList();
    return items;
}

这是由于在非 EN 语言环境设置中构建 LINQ to SQL 查询时 DocumentDB SDK 中的错误(现已修复):https://github.com/Azure/azure-documentdb-net/issues/49