Cosmos DB中是否支持使用OData进行分页? [英] Is there support for paging with OData in Cosmos DB?

查看:120
本文介绍了Cosmos DB中是否支持使用OData进行分页?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以看到通过SQL API在Azure中访问Cosmos DB时支持偏移量/限制-但是OData支持吗?

I can see there is support for offset/limit when accessing a Cosmos DB in Azure via the SQL API - but does OData support this yet?

推荐答案

更新

您可以在github中下载我的演示.并且这篇文章

You can download my demo in github. And this article and offical document can help u.

我的存储"帐户中的数据

邮递员测试

TestDataController.cs

TestDataController.cs

public class TestDataController : ODataController
{
    [EnableQuery]
    public IHttpActionResult Get()
    {
        CloudStorageAccount account = CloudStorageAccount.Parse("DefaultEndpointsProtocol=***x=core.windows.net");
        CloudTableClient tableClient = account.CreateCloudTableClient();
        //table name
        CloudTable table = tableClient.GetTableReference("test");
        // all datas in table
        IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>().Where(x => x.PartitionKey != "0")
        .Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Name = x.Name, Role = x.Role });
        // test data
        //var result = CreateTestData().AsQueryable();
        // real data in `test` table
        var a = linqQuery.ToList<CustomerEntity>().AsQueryable();
        return Ok(a);
    }

    public List<TestData> CreateTestData()
    {
        List<TestData> data = new List<TestData>();
        data.Add(new TestData { Id = 1, Name = "Jignesh", Role = "Project Manager" });
        data.Add(new TestData { Id = 2, Name = "Tejas", Role = "Architect" });
        data.Add(new TestData { Id = 3, Name = "Rakesh", Role = "Lead" });

        return data;
    }
}

WebApiConfig.cs

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapODataServiceRoute("odata", null, GetEdmModel(), new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
        config.EnsureInitialized();


    }
    private static IEdmModel GetEdmModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.Namespace = "WebAPITest";
        builder.ContainerName = "DefaultContainer";
        builder.EntitySet<TestData>("TestData");
        // you can dunamic load entitys later
        builder.EntitySet<CustomerEntity>("CustomerEntity");
        var edmModel = builder.GetEdmModel();
        return edmModel;
    }
}

重要

我不清楚该解决方案.您将使用台式机或Web应用程序中的哪种应用程序?

I am not clear about this solution. What application will you use, desktop or web application?

如果您的应用程序是Web应用程序,则可以查看以下文章.(

If your app is web application, you can see these article.(offical document , Paging With OData And ASP.NET Web API )

如果您的应用不是网络应用.我建议您使用linq解决该问题.

If your app not web application. I suggest u use linq to solve the issue.

    public static async Task Main(string[] args)
    {
        Console.WriteLine("Azure Cosmos Table Samples");
        CloudStorageAccount account = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=*****fix=core.windows.net");
        CloudTableClient tableClient = account.CreateCloudTableClient();
        CloudTable table = tableClient.GetTableReference("test");
        IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>().Where(x => x.PartitionKey != "0")
        .Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Name = x.Name });
       // skip and take method 
       var c = linqQuery.ToList<CustomerEntity>().Skip(3).Take(1).ToList<CustomerEntity>();
        Console.Read();
    }

这篇关于Cosmos DB中是否支持使用OData进行分页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆