Продажи: 1-800-867-1389

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

Обновлено: Август 2014 г.

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

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

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

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

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

DataServiceVersion: 2.0;NetFx
MaxDataServiceVersion: 2.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
                                      };

Проекция одной сущности не поддерживается. Запрос REST, созданный следующим кодом, недопустим:

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)
                 where entity.PartitionKey == "MyPartitionKey"
                 select { entity.RowKey }; // this code is invalid!

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

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

Для возврата n сущностей можно использовать оператор LINQ Take. Обратите внимание, что в одном запросе может быть возвращено не более 1 000 сущностей. Если для оператора Take будет указано значение более 1000, то возникнет ошибка с кодом 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;

Следующий пример возвращает сущности, у которых свойство 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;

См. также

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Показ:
© 2015 Microsoft