我在下面的查询(带有完整代码)时,如果符合该条件的面行中没有返回任何数据。 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())
但是这也不起作用,我得到一个错误&#34; Method&#39; ToString&#39;不受支持。&#34;
编辑2:纠正错误,我打算在上面的编辑中说我有.ToString()
编辑3: 更多信息:
我正在使用默认序列化在文档中使用camel大小写
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
这也会在驼峰套管中转换所有列。
LINQ生成的实际查询低于 -
{{"query":"SELECT * FROM root WHERE (root[\"State\"] != \"Done\") "}}
因此存在列不匹配&#34;状态&#34; vs&#34; state&#34;。
以下是文档db
中的示例文档{
"id": "2017-03-02T22:00:00Z",
"state": "ToProcess"
}