Поделиться через


Написание запросов LINQ к службе таблиц

Можно писать запросы к службе таблиц с помощью синтаксиса LINQ. В следующих примерах показано, как создавать примеры запросов, аналогичные примерам запросов, приведенным в разделе Запросы к таблицам и сущностям, но с использованием LINQ вместо протокола REST.

Служба таблиц поддерживает выполнение простых запросов, которые извлекают все свойства сущности; также можно выбрать подмножество свойств сущности. Служба таблиц также поддерживает фильтрацию результатов запроса с помощью оператора Where и указания количества сущностей, которое нужно вернуть, с помощью оператора Take.

Дополнительные сведения о том, какие операторы LINQ поддерживаются службой таблиц, см. в разделе Операторы запросов, поддерживаемые для службы таблиц.

Проецирование свойств сущности

Предложение select LINQ можно использовать для проецирования подмножества свойств от сущности или сущностей. Максимальное количество свойств, которые можно проецировать, равно 255, что соответствует максимальному количеству свойств в сущности.

Чтобы проецировать свойства сущности, клиент должен поддерживать OData Data Service версии 3.0, указывая заголовки DataServiceVersion или MaxDataServiceVersion следующим образом:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

В следующем примере показано, как проецировать свойства из одной сущности, используя необходимый инициализатор объектов:

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

В следующем примере проецируется 3 свойства сущности, которая имеет 10 свойств. В этом примере 10 свойств сущности SampleEntity представлены буквами от A до 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  
                                      };  

Свойства сущности можно также проецить с помощью параметра запроса $select в стандартном запросе REST. Дополнительные сведения см. в разделе Запрос сущностей.

Дополнительные сведения о проекциях и преобразованиях сущностей см. в разделе Выбор параметра системного запроса ($select) документации по OData.

Получение n верхних сущностей

Для возврата n сущностей можно использовать оператор LINQ Take. Обратите внимание, что максимальное количество сущностей, которые могут быть возвращены в едином запросе, равно 1000. Указание значения более 1000 для оператора Take приведет к ошибке с кодом 400 (неправильный запрос).

В следующем примере возвращаются верхние 10 сущностей из таблицы Customers.

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

Фильтрация по строковым свойствам

В следующем примере производится фильтрация по 2 строковым свойствам:

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

В следующем примере выполняется проверка на соответствие по префиксу с использованием операторов сравнения для возвращения сущностей, у которых свойство LastName начинается с буквы A.

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

Фильтрация по числовым свойствам

В следующем примере возвращаются все сущности, у которых значение свойства Age больше 30.

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

Следующий пример строки возвращает все сущности со свойством AmountDue, значение которого меньше или равно 100.25:

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

Фильтрация по логическим свойствам

Следующий пример возвращает все сущности, у которых свойство IsActive имеет значение true:

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

Фильтрация по свойствам DateTime

Следующий пример возвращает сущности, у которых свойство CustomerSince равно 10 июля 2008 года:

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

См. также:

Запросы к таблицам и сущностям
Операторы запросов, поддерживаемые службой таблиц