【发布时间】:2017-03-02 21:36:55
【问题描述】:
当面行符合该条件时,我有以下查询(带有完整代码)不返回任何数据。 documentdb 查询不支持枚举吗?
var query = _client.CreateDocumentQuery<Job>(CollectionUri, new FeedOptions()
{
MaxItemCount = 1
})
.Where(m => m.State != State.Done)
.AsDocumentQuery();
var docs = new List<Job>();
while (query.HasMoreResults)
{
try
{
foreach (var p in await query.ExecuteNextAsync<Job>())
{
docs.Add(p);
}
}
catch (DocumentClientException e)
{
if (e.StatusCode == HttpStatusCode.NotFound)
{
return docs;
}
throw;
}
}
return docs;
我只是将文档作为一个空列表,没有例外。 State 是一个定义如下的枚举 -
[JsonConverter(typeof(StringEnumConverter))]
public enum State
{
ToProcess,
Run,
Done
}
public class Job {
[JsonProperty("id")]
public string Id {get; set;}
public State State {get;set;}
}
编辑: 我尝试如下更改 where 子句 -
.Where(m => m.State.ToString() != State.Done.ToString())
但这也不起作用,我收到“不支持方法'ToString'的错误。”
编辑 2:更正了我在上面的编辑中说我有 .ToString() 的错字
编辑 3: 更多信息:
我正在使用默认序列化在文档中使用驼峰式大小写,如下所示
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
这也将所有列转换为驼峰式。
LINQ 生成的实际查询如下 -
{{"query":"SELECT * FROM root WHERE (root[\"State\"] != \"Done\") "}}
因此,“State”与“state”列不匹配。
以下是文档 db 中的示例文档
{
"id": "2017-03-02T22:00:00Z",
"state": "ToProcess"
}
【问题讨论】:
-
您能否发布您对 Job 的类定义?您使用的是哪个版本的 DocumentDB .NET SDK?
-
更新了上面的类定义。
-
我想我现在知道这个问题了 - 这是 LINQ 生成的查询 - {{"query":"SELECT * FROM root WHERE (root[\"State\"] != \"Done \") "}} 清楚 - 查找的列查询是帕斯卡大小写“状态”,而文档中的列是驼峰大小写“状态”。有什么办法吗?
标签: azure-cosmosdb