Написание запросов LINQ в службе таблиц
Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

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

 

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

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

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

LINQ select предложение может использоваться для проецирования подмножества свойств от сущности или сущностей. Максимальное количество свойств, которые можно проецировать, равно 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 свойств. В этом примере SampleEntityпо 10 свойств являются буквами от 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 оператор. Обратите внимание, что максимальное количество сущностей, которые могут быть возвращены в едином запросе, равно 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;

Следующий пример возвращает сущности где 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;
Показ:
© 2016 Microsoft