(0) exportieren Drucken
Alle erweitern

Schreiben von LINQ-Abfragen für den Tabellendienst

Letzte Aktualisierung: August 2014

Abfragen für den Tabellendienst können mithilfe von LINQ-Syntax geschrieben werden. In den folgenden Beispielen wird das Schreiben von Beispielabfragen veranschaulicht, die den Beispielabfragen in Abfragen von Tabellen und Entitäten ähneln; dabei wird jedoch LINQ anstelle des REST-Protokolls verwendet.

Der Tabellendienst unterstützt das Ausführen einfacher Abfragen, die alle Eigenschaften einer Entität abrufen; Teilmengen der Eigenschaften einer Entität können nicht ausgewählt werden. Der Tabellendienst unterstützt zudem das Filtern von Abfrageergebnissen mit dem Where-Operator; außerdem kann bestimmt werden, wie viele Entitäten mit dem Take-Operator zurückgegeben werden sollen.

Ausführliche Informationen zu den vom Tabellendienst unterstützten LINQ-Operatoren finden Sie unter Für den Tabellendienst unterstützte Abfrageoperatoren.

Mit der select-Klausel von LINQ kann eine Teilmenge von Eigenschaften aus einer Entität oder Entitäten projiziert werden. Die maximale Anzahl der Eigenschaften, die projiziert werden können, beträgt 255. Dies entspricht auch der maximalen Anzahl von Eigenschaften in einer Entität.

Zum Projizieren der Eigenschaften einer Entität muss der Client OData Data Service, Version 2.0, unterstützen; dies wird durch folgende Angabe des DataServiceVersion-Headers bzw. des MaxDataServiceVersion-Headers angezeigt:

DataServiceVersion: 2.0;NetFx
MaxDataServiceVersion: 2.0;NetFx

Das folgende Beispiel veranschaulicht, wie auf Eigenschaften aus einer einzigen Entität mithilfe der erforderlichen Objektinitialisierung projiziert werden:

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

Im folgenden Beispiel werden drei Eigenschaften einer Entität projiziert, die über insgesamt zehn Eigenschaften verfügt. In diesem Beispiel entsprechen die zehn Eigenschaften von SampleEntity den Buchstaben von A bis 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
                                      };

Die Projektion einer einzelnen Entität wird nicht unterstützt. Die durch den folgenden Code erzeugte REST-Anforderung ist ungültig:

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

Sie können Entitätseigenschaften auch mit der $select-Abfrageoption in einer REST-Standardabfrage projizieren. Weitere Informationen finden Sie unter Query Entities.

Weitere Informationen zu Entitätsprojektionen und -transformationen finden Sie unter Select System Query Option ($select) in der OData-Dokumentation.

Verwenden Sie zum Zurückgeben von n-Entitäten den Take-Operator von LINQ. Beachten Sie, dass von einer einzigen Abfrage maximal 1.000 Entitäten zurückgegeben werden können. Wenn Sie einen größeren Wert als 1.000 angeben, tritt für den Operator Take der Fehlercode 400 (Ungültige Anforderung) auf.

Im folgenden Beispiel werden die obersten 10 Entitäten aus einer Customers-Tabelle zurückgegeben:

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

Im folgenden Beispiel wird nach zwei Zeichenfolgeneigenschaften gefiltert:

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

Im folgenden Beispiel wird mit Vergleichsoperatoren ein Präfixvergleich ausgeführt, um Entitäten mit einer LastName-Eigenschaft zurückzugeben, die mit dem Buchstaben 'A' beginnt:

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

Im folgenden Beispiel werden alle Entitäten mit einer Age-Eigenschaft zurückgegeben, deren Wert größer als 30 ist:

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

In diesem Beispiel werden alle Entitäten mit einer AmountDue-Eigenschaft zurückgegeben, deren Wert kleiner oder gleich 100,25 ist:

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

Im folgenden Beispiel werden alle Entitäten zurückgegeben, bei denen die IsActive-Eigenschaft auf true festgelegt ist:

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

Im folgenden Beispiel werden Entitäten zurückgegeben, bei denen die CustomerSince-Eigenschaft gleich dem 10. Juli 2008 ist:

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

Siehe auch

Anzeigen:
© 2014 Microsoft