Написание запросов 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;
См. также:
Запросы к таблицам и сущностям
Операторы запросов, поддерживаемые службой таблиц