{
"Code": "123456",
"ScanLog": [
{
"TimeStamp": 20160224115507
},
{
"TimeStamp": 20160224115641
}
]
"LastScanTimeStamp": 20160224115641
}
我在C#中创建了这个LINQ查询:
var Query = client.CreateDocumentQuery().OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery();
var feedResp = await Query.ExecuteNextAsync();
这就是结果:
[
{
"Code": "123456",
"TimeStamp": 20160224115507
},
{
"Code": "123456",
"TimeStamp": 20160224115641
},
{
"Code": "abcdef",
"TimeStamp": 20160224101641
},
{
"Code": "abcdef",
"TimeStamp": 20160224105641
}
]
对于这个结果,我以这种方式申请另一个订单:
feedResp.OrderByDescending(a => a.TimeStamp).AsEnumerable();
回复是:
[
{
"Code": "123456",
"TimeStamp": 20160224115641
},
{
"Code": "123456",
"TimeStamp": 20160224115507
},
{
"Code": "abcdef",
"TimeStamp": 20160224105641
},
{
"Code": "abcdef",
"TimeStamp": 20160224101641
}
]
现在,如果我使用LINQ运算符Take()指定检索项的限制进行初始查询,我在结果中丢失了一些元素。 为什么?
答案 0 :(得分:1)
使用此查询,您可以使用相同的文档实现JOIN,这意味着如果您有4个文档,每个文档有4个日志,则您有16个文档。
Linq动态创建查询,也许正在发生的事情是Take正在对文档而不是查询结果。
我要尝试的是在文档查询中使用FeedOptions并指定我想在那里获得的最大结果数。
var Query = client.CreateDocumentQuery("my_collection_uri",new FeedOptions(){MaxItemCount=4}).OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery();
var feedResp = await Query.ExecuteNextAsync();
答案 1 :(得分:0)
你可能已经把订单放在了订单之前。在这种情况下,take取得了无序结果中的一些元素,而不是排序。如果您在订单后执行收盘操作,您将从订购的元素中获取该集合。这可能是你期望的结果。