3 回答
TA贡献1876条经验 获得超7个赞
我知道这并不是对我的问题最有见地的答案,但这里的正确答案是不要试图这样做。如果你曾经处于这样一个位置,有人要求你试图将两种并不真正结合在一起的技术结合在一起,那就说“不”并处理后果。
TA贡献1802条经验 获得超5个赞
如果您使用的是SQL api,并且只需要$orderby,$top和$skip等基本内容,则OData与Cosmos的集成并不难。这是一个生成正确的 SQL 的问题。
如果你需要更多,它会变得有点困难。无论如何,我用这个NuGet库做了一些简单的测试。它似乎至少从我的简单测试中起作用。
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var select = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.SELECT_CLAUSE);
var where = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.WHERE_CLAUSE);
var order = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.ORDERBY_CLAUSE);
var top = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.TOP_CLAUSE);
var all = oDataToSqlTranslator.Translate(odataQueryOptions, TranslateOptions.ALL);
log.LogInformation("SQL select => " + select);
log.LogInformation("SQL where => " + where);
log.LogInformation("SQL order => " + order);
log.LogInformation("SQL all => " + all);
给定此 URL 作为输入:
http://localhost:7071/api/v1/invoices/customer/20?$top=2&$select=CustomerId&$filter=InvoiceNumber eq 'xxx'&orderby=brand
日志显示以下内容:
SQL select => SELECT c.CustomerId FROM c
SQL where => WHERE c.InvoiceNumber = 'xxx'
SQL order => ORDER BY c.InvoiceNumber ASC
SQL all => SELECT TOP 2 c.CustomerId FROM c WHERE c.InvoiceNumber = 'xxx' ORDER BY c.InvoiceNumber ASC
TA贡献1810条经验 获得超4个赞
怎么样 - 将OData转换为SQL,然后在CosmosDB上执行它 https://github.com/Azure/azure-odata-sql-js
- 3 回答
- 0 关注
- 127 浏览
添加回答
举报