【问题标题】:DocumentDB STARTSWITH not working from .NETDocumentDB STARTSWITH 在 .NET 中不起作用
【发布时间】:2016-04-22 16:28:23
【问题描述】:

我有一个名为Customer 的集合,每个条目都有一个名为Number 的属性。以下是全选命令的内容:

[
    { 
        "Number": "K1",
        "Label": "Test1"        
    },
    { 
        "Number": "T1",
        "Label": "Test2"        
    }
]

我使用 Azure 门户对此集合触发以下查询:

SELECT * FROM c WHERE STARTSWITH(c.Number, 'K')

这给了我正确的结果:

[
    { 
        "Number": "K1",
        "Label": "Test1"        
    }
]

但是当我使用 DocumentDB NuGet 包在 C# 中执行此操作时:

var options = new FeedOptions();
var query = "SELECT * FROM c WHERE STARTSWITH(c.Number, 'K')";
var items = client.CreateDocumentQuery<Customer>(uri, options, query).ToList()

然后它将每次检索所有(在本例中为 2 个)项目。

似乎CreateDocumentQuery 完全忽略了这个声明。

编辑

查询的 ActivityId 是7f473650-f125-4b6b-9d4c-2d520deceebd

【问题讨论】:

  • 一些额外的细节将有助于确定根本原因。您能否通过运行 Fiddler 检查通过网络发送的查询文本是什么?或者,如果您可以粘贴一个完整的示例,或共享查询的 ActivityID,那会有所帮助。
  • @AravindRamachandran 我在帖子中添加了活动。我无法检查 Fiddler,因为我无法让 Fiddler 与 https 一起正常工作。我在那里看不到任何网址。

标签: c# .net azure azure-cosmosdb


【解决方案1】:

CreateDocumentQuery的定义,它的参数是uriqueryoptions...,如果你放options而不是query,它会默认query为null,所以你只会得到所有集合中的项目。

public IQueryable<T> CreateDocumentQuery<T>(Uri documentCollectionOrDatabaseUri, SqlQuerySpec querySpec, FeedOptions feedOptions = null, object partitionKey = null);

改成:

var items = client.CreateDocumentQuery<Customer>(uri, query, options).ToList()

【讨论】:

  • 我的经历略有不同。如果我使用 STARTWITH 动词,我只会得到不好的结果。如果我只是检查相等性,我会得到正确的结果。无论如何,这有助于解决问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
相关资源
最近更新 更多