Schreiben von LINQ-Abfragen für den Tabellendienst

Abfragen für den Tabellendienst können mithilfe von LINQ-Syntax geschrieben werden. In den folgenden Beispielen wird gezeigt, wie Beispielabfragen ähnlich wie in Abfragetabellen und Entitäten gezeigt werden, aber LINQ anstelle des REST-Protokolls verwendet werden.

Der Tabellendienst unterstützt das Ausführen einfacher Abfragen, die alle Eigenschaften einer Entität abrufen. Es ist auch möglich, eine Teilmenge der Eigenschaften einer Entität auszuwählen. 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 dazu, welche LINQ-Operatoren vom Tabellendienst unterstützt werden, finden Sie unter Unterstützte Abfrageoperatoren für den Tabellendienst.

Projizieren von Entitätseigenschaften

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.

Um die Eigenschaften einer Entität zu projizieren, muss der Client OData Data Service Version 3.0 unterstützen, wobei entweder die DataServiceVersion Header oder MaxDataServiceVersion wie folgt angegeben werden:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.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  
                                      };  

Sie können Entitätseigenschaften auch projizieren, indem Sie die $select-Abfrageoption in einer Standard-REST-Anforderung verwenden. Weitere Informationen finden Sie unter Abfrageentitäten.

Weitere Informationen zu Entitätsprojektionen und Transformationen finden Sie unter Auswählen der Systemabfrageoption ($select) in der OData-Dokumentation.

Zurückgeben der obersten n Entitäten

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 Take-Operator 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);  

Filtern nach Zeichenfolgeneigenschaften

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;  

Filtern nach numerischen Eigenschaften

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;  

Filtern nach booleschen Eigenschaften

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;  

Filtern nach DateTime-Eigenschaften

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;  

Weitere Informationen

Abfragen von Tabellen und Entitäten
Für den Tabellendienst unterstützte Abfrageoperatoren