Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: Bord
Azure Cosmos DB for Table stöder OData- och LINQ-frågor mot nyckel-/värdedata (tabell).
Den här artikeln beskriver följande uppgifter:
- Köra frågor mot data med API:et för tabell
Frågorna i den här artikeln använder följande People-exempeltabell:
| PartitionKey | RowKey | PhoneNumber | |
|---|---|---|---|
| Harp | Walter | Walter@contoso.com | 425-555-0101 |
| Smith | Ben | Ben@contoso.com | 425-555-0102 |
| Smith | Jeff | Jeff@contoso.com | 425-555-0104 |
Mer information om hur du frågar med hjälp av API:et för tabell finns i Fråga efter tabeller och entiteter.
Förutsättningar
För att de här frågorna ska fungera måste du ha ett konto i Azure Cosmos DB och ha entitetsdata i containern. Om du inte har något konto eller data slutför du Snabbstart: Azure Cosmos DB for Table för .NET för att skapa ett konto och fylla i databasen.
Fråga om PartitionKey och RowKey
Eftersom egenskaperna PartitionKey och RowKey utformar en entitets primärnyckel kan du använda följande specialsyntax för att identifiera entiteten:
Fråga
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Resultat
| PartitionKey | RowKey | PhoneNumber | |
|---|---|---|---|
| Harp | Walter | Walter@contoso.com | 425-555-0104 |
Du kan också ange egenskaperna som en del av alternativet $filter, som du ser i följande avsnitt. Nyckelegenskapens namn och konstanta värden är skiftlägeskänsliga. Egenskaperna PartitionKey och RowKey är av typen Sträng.
Fråga med hjälp av ett OData-filter
När du skapar en filtersträng ska du tänka på följande regler:
- Använd de logiska operatorerna som definieras av OData-protokollspecifikationen för att jämföra en egenskap med ett värde. Du kan inte jämföra en egenskap med ett dynamiskt värde. En sida av uttrycket måste vara en konstant.
- URL-kodade blanksteg måste separera egenskapsnamnet, operatorn och konstantvärdet. Ett blanksteg är URL-kodat som
%20. - Alla delar av filtersträngen är skiftlägeskänsliga.
- Det konstanta värdet måste vara av samma datatyp som egenskapen för filtret för att returnera giltiga resultat. Mer information om egenskapstyper som stöds finns i Förstå tabelltjänstdatamodellen.
Här är en exempelfråga som visar hur du filtrerar via PartitionKey och e-postegenskaperna med ett OData-$filter.
Fråga
https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'
Mer information om hur du skapar filteruttryck för olika datatyper finns i Fråga tabeller och entiteter.
Resultat
| PartitionKey | RowKey | PhoneNumber | |
|---|---|---|---|
| Smith | Ben | Ben@contoso.com | 425-555-0102 |
Frågorna om datetime-egenskaper returnerar inga data när de körs i Azure Cosmos DB:s API för tabell. Medan Azure Table Storage lagrar datumvärden med tidskornighet för fästingar använder _ts API:et för tabell i Azure Cosmos DB egenskapen. Egenskapen _ts är på en andra nivå av kornighet, vilket inte är ett OData-filter. Azure Cosmos DB blockerar frågorna på tidsstämpelegenskaper. Som en lösning kan du definiera en anpassad datetime- eller long datatypegenskap och ange datumvärdet från klienten.
Fråga med hjälp av LINQ
Du kan också fråga med hjälp av LINQ, som översätter till motsvarande OData-frågeuttryck. Här är ett exempel på hur du skapar frågor med .NET SDK:
IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>()
.Where(x => x.PartitionKey == "4")
.Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Email = x.Email });
Nästa steg
Du kan nu fortsätta till nästa självstudie för att lära dig hur du distribuerar dina data globalt.