C# DocumentDb DocumentClient获取前25个文档
开始使用Cosmos和文档db/sql。为什么这不起作用?没有抛出错误,我可以看到。有一些数据应该返回C# DocumentDb DocumentClient获取前25个文档,c#,azure,azure-cosmosdb,documentclient,C#,Azure,Azure Cosmosdb,Documentclient,开始使用Cosmos和文档db/sql。为什么这不起作用?没有抛出错误,我可以看到。有一些数据应该返回 private const string EndpointUri = "some url"; private const string PrimaryKey = "somekey"; private const string DbId = "People"; private const string CollectionId = "Person"; pr
private const string EndpointUri = "some url";
private const string PrimaryKey = "somekey";
private const string DbId = "People";
private const string CollectionId = "Person";
private DocumentClient client;
// GET: api/Person
[HttpGet]
public IEnumerable<Person> Get()
{
this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
FeedOptions queryOptions = new FeedOptions { MaxItemCount = 25, EnableCrossPartitionQuery = true };
IQueryable<Person> personQuery = this.client.CreateDocumentQuery<Person>(
UriFactory.CreateDocumentCollectionUri(DbId, CollectionId), queryOptions)
.Where(f => f.NameFirst != "Andersen");
List<Person> retVal = new List<Person>();
retVal = personQuery.ToList();
return retVal;
}
private const string EndpointUri=“some url”;
private const string PrimaryKey=“somekey”;
private const string DbId=“People”;
private const string CollectionId=“Person”;
私人文件客户;
//获取:api/人
[HttpGet]
公共IEnumerable Get()
{
this.client=newdocumentclient(新Uri(EndpointUri),PrimaryKey);
FeedOptions queryOptions=new FeedOptions{MaxItemCount=25,EnableCrossPartitionQuery=true};
IQueryable personQuery=this.client.CreateDocumentQuery(
CreateDocumentCollectionUri(DbId,CollectionId),queryOptions)
其中(f=>f.NameFirst!=“安达信”);
List retVal=新列表();
retVal=personQuery.ToList();
返回返回;
}
MaxItemCount
是每次枚举操作将获得的最大项目数。它不返回前25个文档,而是返回与此查询匹配的所有文档,每个枚举聚合25个文档
如果您想要前25项,您的代码应该如下所示:
[HttpGet]
public async Task<IEnumerable<Person>> Get()
{
this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
FeedOptions queryOptions = new FeedOptions { EnableCrossPartitionQuery = true };
var personQuery = this.client.CreateDocumentQuery<Person>(
UriFactory.CreateDocumentCollectionUri(DbId, CollectionId), queryOptions)
.Where(f => f.NameFirst != "Andersen").Take(25).AsDocumentQuery();
List<Person> retVal = new List<Person>();
while(personQuery.HasMoreResults)
{
var results = await personQuery.ExecuteNextAsync<Person>();
retVal.AddRange(results);
}
return retVal;
}
[HttpGet]
公共异步任务Get()
{
this.client=newdocumentclient(新Uri(EndpointUri),PrimaryKey);
FeedOptions queryOptions=new FeedOptions{EnableCrossPartitionQuery=true};
var personQuery=this.client.CreateDocumentQuery(
CreateDocumentCollectionUri(DbId,CollectionId),queryOptions)
.Where(f=>f.NameFirst!=“Andersen”).Take(25).AsDocumentQuery();
List retVal=新列表();
while(personQuery.HasMoreResults)
{
var results=await personQuery.ExecuteNextAsync();
retVal.AddRange(结果);
}
返回返回;
}
根据您对集合中字符串的索引方式,您可能还需要将
FeedOptions
对象的EnableScanInQuery
属性设置为trueMaxItemCount
是每次枚举操作将获得的最大项数。它不返回前25个文档,而是返回与此查询匹配的所有文档,每个枚举聚合25个文档
如果您想要前25项,您的代码应该如下所示:
[HttpGet]
public async Task<IEnumerable<Person>> Get()
{
this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
FeedOptions queryOptions = new FeedOptions { EnableCrossPartitionQuery = true };
var personQuery = this.client.CreateDocumentQuery<Person>(
UriFactory.CreateDocumentCollectionUri(DbId, CollectionId), queryOptions)
.Where(f => f.NameFirst != "Andersen").Take(25).AsDocumentQuery();
List<Person> retVal = new List<Person>();
while(personQuery.HasMoreResults)
{
var results = await personQuery.ExecuteNextAsync<Person>();
retVal.AddRange(results);
}
return retVal;
}
[HttpGet]
公共异步任务Get()
{
this.client=newdocumentclient(新Uri(EndpointUri),PrimaryKey);
FeedOptions queryOptions=new FeedOptions{EnableCrossPartitionQuery=true};
var personQuery=this.client.CreateDocumentQuery(
CreateDocumentCollectionUri(DbId,CollectionId),queryOptions)
.Where(f=>f.NameFirst!=“Andersen”).Take(25).AsDocumentQuery();
List retVal=新列表();
while(personQuery.HasMoreResults)
{
var results=await personQuery.ExecuteNextAsync();
retVal.AddRange(结果);
}
返回返回;
}
根据您对集合中字符串的索引方式,您可能还需要将FeedOptions
对象的EnableScanInQuery
属性设置为true
以获得所需的顶级文档,如Nick所述,使用LINQ.Take()是正确的方法
使用FeedOptions.MaxItemCount和ExecuteExtAsync也是一种替代方法。但是,正如您所观察到的,它可能会返回0个结果,因此需要将其考虑在内。有关这方面的更多详细信息,请参阅Aravind对这个相关问题的评论:。如Nick所述,使用LINQ.Take()来获取所需的顶级文档是正确的方法
使用FeedOptions.MaxItemCount和ExecuteExtAsync也是一种替代方法。但是,正如您所观察到的,它可能会返回0个结果,因此需要将其考虑在内。有关这方面的更多详细信息,请参阅Aravind对这一相关问题的评论:。这似乎不起作用。严重性代码说明项目文件行抑制状态错误CS1503参数1:无法从“Microsoft.Azure.Documents.Client.FeedResponse”转换为“System.Collections.Generic.IEnumerable”CoreWebApp\Documents\visual studio 2017\Project\CoreWebApp\CoreWebApp\Api\PersonControl.cs 44Active@WouldRatherBuildAMotor我添加了映射键入ExecuteNextAsync
。用最新的答案试一试。这似乎不起作用。严重性代码说明项目文件行抑制状态错误CS1503参数1:无法从“Microsoft.Azure.Documents.Client.FeedResponse”转换为“System.Collections.Generic.IEnumerable”CoreWebApp\Documents\visual studio 2017\Project\CoreWebApp\CoreWebApp\Api\PersonControl.cs 44Active@WouldRatherBuildAMotor我添加了映射键入ExecuteNextAsync
。用最新的答案试一试。