Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Core对Cosmos DB中的PK、Id和鉴别器有一个特定的格式。我做了一些更改,以获得更高的清除率。请注意,OData本机不受文档DB的支持。所以我不确定这会有什么帮助。如果您使用的是表存储或sql,它们是支持odata的db技术,可以在数据库端处理o_C#_Azure_Odata_Azure Functions_Azure Cosmosdb - Fatal编程技术网

C# Core对Cosmos DB中的PK、Id和鉴别器有一个特定的格式。我做了一些更改,以获得更高的清除率。请注意,OData本机不受文档DB的支持。所以我不确定这会有什么帮助。如果您使用的是表存储或sql,它们是支持odata的db技术,可以在数据库端处理o

C# Core对Cosmos DB中的PK、Id和鉴别器有一个特定的格式。我做了一些更改,以获得更高的清除率。请注意,OData本机不受文档DB的支持。所以我不确定这会有什么帮助。如果您使用的是表存储或sql,它们是支持odata的db技术,可以在数据库端处理o,c#,azure,odata,azure-functions,azure-cosmosdb,C#,Azure,Odata,Azure Functions,Azure Cosmosdb,Core对Cosmos DB中的PK、Id和鉴别器有一个特定的格式。我做了一些更改,以获得更高的清除率。请注意,OData本机不受文档DB的支持。所以我不确定这会有什么帮助。如果您使用的是表存储或sql,它们是支持odata的db技术,可以在数据库端处理odata查询,这将更有意义 public static async Task<IActionResult> MachinesByRegion_Get( [HttpTrigger(Authorizati


Core对Cosmos DB中的PK、Id和鉴别器有一个特定的格式。

我做了一些更改,以获得更高的清除率。请注意,OData本机不受文档DB的支持。所以我不确定这会有什么帮助。如果您使用的是表存储或sql,它们是支持odata的db技术,可以在数据库端处理odata查询,这将更有意义
        public static async Task<IActionResult> MachinesByRegion_Get(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "Region/Machines")]HttpRequest req,
        ILogger log)
    {

        log.LogInformation("GetMachinesByRegion function Started to process a request.");

        // check parameters
        if (string.IsNullOrEmpty(req.Query["PageSize"]) || string.IsNullOrEmpty(req.Query["PageNumber"]))
            return new BadRequestObjectResult(new PostActionResponse(400, "Please provide valid PageSize and PageNumber"));

        // Number of documents per page
        int pageSize = int.Parse(req.Query["PageSize"]);
        Dictionary<string,string> field = new Dictionary<string, string>();
        string columns = "*";
        if (!string.IsNullOrEmpty(req.Query["Fields"]))
        {
            string columnstring = req.Query["Fields"].ToString();
            field.Add("Fields", columnstring);
            string[] columnarr = columnstring.Split(',');
            int arraylength = columnarr.Length;

            // Build Selection columns
            if (arraylength != 0)
            {
                StringBuilder strinbuilder = new StringBuilder("c.id, ");
                int i = 1;
                foreach (string value in columnarr)
                {
                    strinbuilder.Append($"c.{value.Replace(" ", String.Empty)}");
                    if (arraylength > i)
                        strinbuilder.Append(", ");
                    i++;
                }
                columns = strinbuilder.ToString();
            }
        }

        // Parse Query Parameter
        int pagenumber = int.Parse(req.Query["PageNumber"]);

        int offset = pagenumber == 1 ? 0 : (pagenumber - 1) * pageSize;

        // Bulid query string based on request
        string sqlstr = string.Format($"SELECT {columns} FROM c ORDER BY c.id ASC OFFSET {offset} LIMIT {pageSize}");


        Helper.TraceLogWriter(log, "Summary:");
        Helper.TraceLogWriter(log, "--------------------------------------------------------------------- ");
        Helper.TraceLogWriter(log, $"Collection : {DBConstants.DataBaseName.Telemetry}.{DBConstants.ContainerName.KomatsuMachine}");
        Helper.TraceLogWriter(log, $"The Query String : {sqlstr}");
        Helper.TraceLogWriter(log, "--------------------------------------------------------------------- ");
        Helper.TraceLogWriter(log, "");

        try
        {
            // Feed Options 
            var options = new FeedOptions
            {
                MaxItemCount = pageSize,
                MaxDegreeOfParallelism = -1,
                EnableCrossPartitionQuery = true,
            };

            // Create CosmosDB Connection URI
            Uri collectionUri = UriFactory.CreateDocumentCollectionUri(databaseId: DBConstants.DataBaseName.Telemetry, collectionId: DBConstants.ContainerName.KomatsuMachine);

            ConnectionPolicy connPolicy = new ConnectionPolicy
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectionProtocol = Protocol.Tcp
            };

            using var client = new DocumentClient(new Uri(BaseRepository.EndpointUri), BaseRepository.PrimaryKey, connPolicy);
            // Get the List of Items against the Query string
            var results = client.CreateDocumentQuery(collectionUri, sqlstr, options).ToList();
            int records = results.Count;
            Helper.TraceLogWriter(log, $"Retrieved Documents: {records}");

            Helper.TraceLogWriter(log, $"Sample Document: {JsonConvert.DeserializeObject(JsonConvert.SerializeObject(results[0]))}");

            await Task.Yield();

            // Build base url                    
            var pages = new PageLinkBuilder($"{BaseRepository.BaseUrl}/api/Region/Machines", pagenumber, pageSize, records, field);

            return (ActionResult)new OkObjectResult(new PagedResult
            {
                PageNumber = pagenumber,
                PageSize = records,
                Pages = pages,
                Results = results
            });
        }
        catch (Exception ex)
        {
            Helper.TraceErrorWriter(log, $"Exception caught in GetMachinesByProduct: {ex.Message}");
            return new UnprocessableEntityObjectResult(new PostActionResponse(422, "Exception in CosmosDB, Please check logs"));
        }
    }
public async Task<IEnumerable<T>> GetItemsAsync(Expression<Func<T, bool>> predicate)
    {
        IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
            UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
            new FeedOptions { MaxItemCount = -1 })
            .Where(predicate)
            .AsDocumentQuery();

        List<T> results = new List<T>();
        while (query.HasMoreResults)
        {
            results.AddRange(await query.ExecuteNextAsync<T>());
        }

        return results;
    }