我在documentdb中存储的文档有一般的顶级结构(在本地使用cosmosdb模拟器)。它看起来像这样:
{
DocType: "MyDocType",
Document: {
// Some instance of MyDocType
}
}
为了只处理那些特定的文档类型,我首先选择某个doctype的子集,然后在实际文档中查询我正在查找的内容。例如,假设MyDocType上有一个名为Order的字段。我会做类似的事情:
var query = _client.CreateDocumentQuery(_collectionUri);
query = query.Where(dw => dw.DocType == "MyDocType").Select(dw => dw.Document)
query = query.Where(d => d.Order >= 1).OrderBy(d => d.Order);
var results = query.ToList() // <== No Results
如果我查看生成的SQL,它看起来像这样:
SELECT VALUE root["Document"] FROM root WHERE ((root["DocType"] = "MyDocType") AND (root["Document"]["Order"] >= 1)) ORDER BY root["Order"] ASC
因此Order By被应用于根目录,其中Order不存在,而不是存在于它存在的Document(以及正确应用第二个Where子句的地方)。
我是否在这里错误地申请了订购,或者DocumentDb linq驱动程序是否愚蠢?