我正在尝试组合自定义选择语句(在DocumentDB中)并使MaxItemCount同时工作。
我正在尝试做的一个例子是:
var itemList= DocClient.CreateDocumentQuery<MyEntity>(
collection.SelfLink,
new FeedOptions { MaxItemCount = 5 })
.Select(m =>
new {
MyProperty1 = m.Property1,
MyProperty2 = m.Property2
});
在上面的例子中,MyEntity可能有几个属性,但我只想返回前两个属性(并节省执行持续时间/流量等)。
这很好用,但MaxItemCount被忽略了。无论我放在那里,我都会收回整个系列。
现在,如果我将查询修改为:
IDocumentQuery<MessageEntity> query =
DocClient.CreateDocumentQuery<MessageEntity>
(collection.SelfLink, new FeedOptions{MaxItemCount=5}).AsDocumentQuery();
var myTask = query.ExecuteNextAsync<MessageEntity>();
现在,在第二种情况下,遵循MaxItemCount(我只得到5)但我似乎没有自定义Select语句来限制返回哪些属性。
我错过了一些明显的东西,或者这是一个已知的限制?
由于
肯
答案 0 :(得分:0)
该查询生成一个IQueryable对象,您通常使用ToEnumerable()来获取可以使用ToList或ToArray或类似内容枚举的内容。
这将继续在MaxItemCount块中获取结果,直到没有更多结果(continuation == String.Empty)
如果您不想这样做,并控制分页,则使用AsDocumentQuery()扩展名,并按照您的指示使用ExexcuteNextAsync()手动获取每个页面。
所以,你可以这样做;
var q = client.CreateDocumentQuery<Family>(collectionLink, new FeedOptions { MaxItemCount = 5 })
.Where(f => f.Id == "AndersenFamily" || f.Address.City == "NY")
.Select(f => new { Name = f.LastName, City = f.Address.City })
.AsDocumentQuery();
然后继续使用query.ExecuteNextAsync()来获取您正在执行的每个页面。