在Linq中选择后的OrderBy会为DocumentDb生成错误的SQL吗?

时间:2017-09-06 03:44:56

标签: c# linq azure-cosmosdb

我在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驱动程序是否愚蠢?

0 个答案:

没有答案