Udostępnij za pośrednictwem


Pisanie zapytań LINQ względem usługi Table Service

Zapytania w usłudze Table Service można pisać przy użyciu składni LINQ. W poniższych przykładach pokazano, jak pisać przykładowe zapytania podobne do przykładowych zapytań wyświetlanych w artykule Wykonywanie zapytań dotyczących tabel i jednostek, ale przy użyciu linQ zamiast protokołu REST.

Usługa Table Service obsługuje wykonywanie prostych zapytań, które pobierają wszystkie właściwości jednostki; Istnieje również możliwość wybrania podzestawu właściwości jednostki. Usługa Table Service obsługuje również filtrowanie wyników zapytania przy użyciu Where operatora i określanie liczby jednostek do zwrócenia przy użyciu Take operatora .

Aby uzyskać szczegółowe informacje o operatorach LINQ obsługiwanych przez usługę Table Service, zobacz Operatory zapytań obsługiwane przez usługę Table Service.

Projekcja właściwości jednostki

Klauzula LINQ select może służyć do projekcji podzestawu właściwości z jednostki lub jednostek. Maksymalna liczba właściwości, które można rzutować, wynosi 255, która jest również maksymalną liczbą właściwości w jednostce.

Aby projektować właściwości jednostki, klient musi obsługiwać usługę danych OData w wersji 3.0, wskazaną przez określenie DataServiceVersion nagłówków lub MaxDataServiceVersion w następujący sposób:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

W poniższym przykładzie pokazano, jak projektować właściwości z pojedynczej jednostki przy użyciu inicjatora wymaganego obiektu:

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                 where entity.PartitionKey == "MyPartitionKey"  
                 select new { entity.RowKey };  

Poniższy przykład zawiera 3 właściwości z jednostki, która ma 10 właściwości. W tym przykładzie SampleEntity10 właściwości to litery od A do J:

IEnumerable<SampleEntity> query = from entity in  
                                       dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                                       where entity.PartitionKey == "MyPartitionKey"  
                                       select new SampleEntity  
                                      {  
                                          PartitionKey = entity.PartitionKey,  
                                          RowKey = entity.RowKey,  
                                          A = entity.A,  
                                          D = entity.D,  
                                          I = entity.I  
                                      };  

Właściwości jednostki można również projektować przy użyciu opcji zapytania $select w standardowym żądaniu REST. Aby uzyskać więcej informacji, zobacz Query Entities (Jednostki zapytań).

Aby uzyskać więcej informacji na temat projekcji i przekształceń jednostek, zobacz Wybieranie opcji zapytania systemowego ($select) w dokumentacji OData.

Zwracanie pierwszych n jednostek

Aby zwrócić n jednostki, użyj operatora LINQ Take . Należy pamiętać, że maksymalna liczba jednostek, które mogą być zwracane w jednym zapytaniu, wynosi 1000. Określenie wartości większej niż 1000 dla Take operatora powoduje wyświetlenie kodu błędu 400 (Nieprawidłowe żądanie).

Poniższy przykład zwraca 10 pierwszych jednostek z tabeli Customers:

var query = (from entity in context.CreateQuery<Customer>("Top10Customers")  
                 select entity).Take(10);  

Filtrowanie we właściwościach ciągu

Poniższy przykład filtruje dwie właściwości ciągu:

var query = from entity in context.CreateQuery<Customer>("SpecificCustomer")  
                 where entity.LastName.Equals("Smith")  
                 && entity.FirstName.Equals("John")  
                 select entity;  

Poniższy przykład wykonuje dopasowywanie prefiksów przy użyciu operatorów porównania, aby zwrócić jednostki z właściwością rozpoczynającą LastName się od litery "A":

var query = from entity in context.CreateQuery<Customer>("CustomersA")  
                 where entity.LastName.CompareTo("A") >= 0  
                 && entity.LastName.CompareTo("B") < 0  
                 select entity;  

Filtrowanie we właściwościach liczbowych

Poniższy przykład zwraca wszystkie jednostki z właściwością Age , której wartość jest większa niż 30:

var query = from entity in context.CreateQuery<Customer>("CustomersOver30")  
                 where entity.Age > 30  
                 select entity;  

W tym przykładzie zwracane są wszystkie jednostki z właściwością AmountDue , której wartość jest mniejsza lub równa 100,25:

var query = from entity in context.CreateQuery<Customer>("CustomersAmountDue")  
                 where entity.AmountDue <= 100.25  
                 select entity;  

Filtrowanie właściwości logicznych

Poniższy przykład zwraca wszystkie jednostki, w których właściwość jest ustawiona IsActive na truewartość :

var query = from entity in context.CreateQuery<Customer>("ActiveCustomers")  
                 where entity.IsActive == true  
                 select entity;  

Filtrowanie we właściwościach daty/godziny

Poniższy przykład zwraca jednostki, w których CustomerSince właściwość jest równa 10 lipca 2008 r.:

DateTime dt = new DateTime(2008, 7, 10);  
var query = from entity in context.CreateQuery<Customer>("CustomerSince")  
                 where entity.CustomerSince.Equals(dt)  
                 select entity;  

Zobacz też

Wykonywanie zapytań dotyczących tabel i jednostek
Operatory zapytań obsługiwane przez usługę Table Service