gpt4 book ai didi

c# - Linq 中的 DocumentDb 空间距离返回奇怪的结果

转载 作者:行者123 更新时间:2023-11-30 17:42:07 24 4
gpt4 key购买 nike

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

下面的测试返回一个包含一个 LocationDocument 的列表。 test2 返回返回一个空列表。 isEqual bool 返回 true,所以我无法理解为什么它们返回不同的结果。我手动确认经度和纬度也相同。

// 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 中作为查询运行时才可用。

提前致谢。

点对象:

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 设置有关。我属于非美国文化(准确地说是 en-ZA)。

test2 然后抛出异常,而 test1 仍然输出预期结果。我收到 AggregateException。然后,我只需将查询中的启用扫描添加到标题中即可。以下是您如何做到这一点:

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

最佳答案

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

关于c# - Linq 中的 DocumentDb 空间距离返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com