Escritura de consultas LINQ en Table service

Puede escribir consultas con el servicio Tabla usando sintaxis LINQ. En los ejemplos siguientes se muestra cómo escribir consultas de ejemplo similares a las consultas de ejemplo que se muestran en Consultas de tablas y entidades, pero con LINQ en lugar del protocolo REST.

Table service admite la ejecución de consultas sencillas que recuperan todas las propiedades de una entidad; También es posible seleccionar un subconjunto de las propiedades de una entidad. Table service también permite filtrar los resultados de la consulta mediante el operador Where y especificar el número de entidades que se deben devolver mediante el operador Take.

Para más información sobre qué operadores LINQ son compatibles con Table service, consulte Operadores de consulta compatibles con Table Service.

Proyectar las propiedades de las entidades

La cláusula LINQ select se puede utilizar para proyectar un subconjunto de las propiedades de una o varias entidades. El número máximo de propiedades que se pueden proyectar es de 255, que también es el número máximo de propiedades de una entidad.

Para proyectar las propiedades de una entidad, el cliente debe admitir la versión 3.0 del servicio de datos de OData, indicado especificando los encabezados o MaxDataServiceVersion de la DataServiceVersion siguiente manera:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

En el ejemplo siguiente se muestra cómo proyectar las propiedades de una sola entidad utilizando el inicializador de objeto necesario:

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

En el ejemplo siguiente se proyectan 3 de las 10 propiedades de una entidad. En este ejemplo, las 10 propiedades de SampleEntity son las letras de la A a la 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  
                                      };  

También puede proyectar propiedades de entidad mediante la opción de consulta $select en una solicitud REST estándar. Para obtener más información, consulte Entidades de consulta.

Para obtener más información sobre las proyecciones y transformaciones de entidades, vea Seleccionar opción de consulta del sistema ($select) en la documentación de OData.

Devolver las n primeras entidades

Para devolver n entidades, utilice el operador LINQ Take. Tenga en cuenta que en una sola consulta se pueden devolver un máximo de 1.000 entidades. Si se especifica un valor mayor que 1.000 para el operador Take, se produce el código de error 400 (Solicitud incorrecta).

En el ejemplo siguiente se devuelven las 10 primeras entidades de una tabla denominada Customers:

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

Filtro por propiedades de cadena

En el ejemplo siguiente se filtra según dos propiedades de cadena:

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

En el ejemplo siguiente se obtienen las coincidencias con prefijos mediante operadores de comparación que devuelven las entidades cuya propiedad LastName empiece por la letra “A”:

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

Filtro por propiedades numéricas

En el ejemplo siguiente se devuelven todas las entidades cuya propiedad Age tiene un valor mayor que 30:

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

Este ejemplo devuelve todas las entidades que tienen una propiedad AmountDue cuyo valor es menor o igual que 100.25:

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

Filtro por propiedades booleanas

El ejemplo siguiente devuelve todas las entidades cuya propiedad IsActive está establecida en true:

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

Filtro por propiedades de fecha y hora

El ejemplo siguiente devuelve las entidades cuya propiedad CustomerSince es igual al 10 de julio de 2008:

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

Consulte también

Consulta de tablas y entidades
Operadores de consulta admitidos para el servicio Tabla