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 關注
- 152 瀏覽
添加回答
舉報