- DocumentDB SQL 教程
- DocumentDB SQL - 首頁
- DocumentDB SQL - 概述
- DocumentDB SQL - Select 子句
- DocumentDB SQL - From 子句
- DocumentDB SQL - Where 子句
- DocumentDB SQL - 運算子
- DocumentDB - Between 關鍵字
- DocumentDB SQL - In 關鍵字
- DocumentDB SQL - Value 關鍵字
- DocumentDB SQL - Order By 子句
- DocumentDB SQL - 迭代
- DocumentDB SQL - 聯接
- DocumentDB SQL - 別名
- DocumentDB SQL - 陣列建立
- DocumentDB - 標量表達式
- DocumentDB SQL - 引數化
- DocumentDB SQL - 內建函式
- LINQ to SQL 轉換
- JavaScript 整合
- 使用者定義函式
- 複合 SQL 查詢
- DocumentDB SQL 有用資源
- DocumentDB SQL - 快速指南
- DocumentDB SQL - 有用資源
- DocumentDB SQL - 討論
DocumentDB SQL - LINQ to SQL 轉換
在 DocumentDB 中,我們實際上使用 SQL 來查詢文件。如果我們正在進行 .NET 開發,還有一個可以使用的 LINQ 提供程式,它可以從 LINQ 查詢生成相應的 SQL。
支援的資料型別
在 DocumentDB 中,所有 JSON 基本型別都受 DocumentDB .NET SDK 中包含的 LINQ 提供程式支援,如下所示:
- 數值
- 布林值
- 字串
- 空值
支援的表示式
以下標量表達式受 DocumentDB .NET SDK 中包含的 LINQ 提供程式支援。
常量值 - 包括基本資料型別的常量值。
屬性/陣列索引表示式 - 表示式引用物件的屬性或陣列元素。
算術表示式 - 包括對數值和布林值的常見算術表示式。
字串比較表示式 - 包括將字串值與某個常量字串值進行比較。
物件/陣列建立表示式 - 返回複合值型別或匿名型別物件或此類物件的陣列。這些值可以巢狀。
支援的 LINQ 運算子
以下是 DocumentDB .NET SDK 中包含的 LINQ 提供程式中支援的 LINQ 運算子列表。
Select - 投影轉換為 SQL SELECT,包括物件構造。
Where - 篩選器轉換為 SQL WHERE,並支援在 &&、|| 和 ! 與 SQL 運算子之間進行轉換。
SelectMany - 允許將陣列展開到 SQL JOIN 子句。可用於連結/巢狀表示式以篩選陣列元素。
OrderBy 和 OrderByDescending - 轉換為 ORDER BY 升序/降序。
CompareTo - 轉換為範圍比較。由於字串在 .NET 中不可比較,因此通常用於字串。
Take - 轉換為 SQL TOP 以限制查詢結果。
數學函式 - 支援從 .NET 的 Abs、Acos、Asin、Atan、Ceiling、Cos、Exp、Floor、Log、Log10、Pow、Round、Sign、Sin、Sqrt、Tan、Truncate 轉換為等效的 SQL 內建函式。
字串函式 - 支援從 .NET 的 Concat、Contains、EndsWith、IndexOf、Count、ToLower、TrimStart、Replace、Reverse、TrimEnd、StartsWith、SubString、ToUpper 轉換為等效的 SQL 內建函式。
陣列函式 - 支援從 .NET 的 Concat、Contains 和 Count 轉換為等效的 SQL 內建函式。
地理空間擴充套件函式 - 支援從存根方法 Distance、Within、IsValid 和 IsValidDetailed 轉換為等效的 SQL 內建函式。
使用者定義擴充套件函式 - 支援從存根方法 UserDefinedFunctionProvider.Invoke 轉換為相應的使用者定義函式。
其他 - 支援合併和條件運算子的轉換。可以根據上下文將 Contains 轉換為 String CONTAINS、ARRAY_CONTAINS 或 SQL IN。
讓我們來看一個我們將使用 .Net SDK 的示例。以下是我們將在此示例中考慮的三個文件。
新客戶 1
{
"name": "New Customer 1",
"address": {
"addressType": "Main Office",
"addressLine1": "123 Main Street",
"location": {
"city": "Brooklyn",
"stateProvinceName": "New York"
},
"postalCode": "11229",
"countryRegionName": "United States"
},
}
新客戶 2
{
"name": "New Customer 2",
"address": {
"addressType": "Main Office",
"addressLine1": "678 Main Street",
"location": {
"city": "London",
"stateProvinceName": " London "
},
"postalCode": "11229",
"countryRegionName": "United Kingdom"
},
}
新客戶 3
{
"name": "New Customer 3",
"address": {
"addressType": "Main Office",
"addressLine1": "12 Main Street",
"location": {
"city": "Brooklyn",
"stateProvinceName": "New York"
},
"postalCode": "11229",
"countryRegionName": "United States"
},
}
以下是使用 LINQ 查詢的程式碼。我們在 q 中定義了一個 LINQ 查詢,但它只有在執行 .ToList 時才會執行。
private static void QueryDocumentsWithLinq(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Query Documents (LINQ) ****");
Console.WriteLine();
Console.WriteLine("Quering for US customers (LINQ)");
var q =
from d in client.CreateDocumentQuery<Customer>(collection.DocumentsLink)
where d.Address.CountryRegionName == "United States"
select new {
Id = d.Id,
Name = d.Name,
City = d.Address.Location.City
};
var documents = q.ToList();
Console.WriteLine("Found {0} US customers", documents.Count);
foreach (var document in documents) {
var d = document as dynamic;
Console.WriteLine(" Id: {0}; Name: {1}; City: {2}", d.Id, d.Name, d.City);
}
Console.WriteLine();
}
SDK 將把我們的 LINQ 查詢轉換為 DocumentDB 的 SQL 語法,根據我們的 LINQ 語法生成 SELECT 和 WHERE 子句。
讓我們從 CreateDocumentClient 任務呼叫上述查詢。
private static async Task CreateDocumentClient() {
// Create a new instance of the DocumentClient
using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
'myfirstdb'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First();
QueryDocumentsWithLinq(client);
}
}
執行上述程式碼時,會生成以下輸出。
**** Query Documents (LINQ) **** Quering for US customers (LINQ) Found 2 US customers Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1; City: Brooklyn Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1; City: Brooklyn