Dela via


Skriva LINQ-frågor mot tabelltjänsten

Du kan skriva frågor mot table-tjänsten med LINQ-syntax. Följande exempel visar hur du skriver exempelfrågor som liknar de exempelfrågor som visas i Fråga tabeller och entiteter, men använder LINQ i stället för REST-protokollet.

Tabelltjänsten stöder körning av enkla frågor som hämtar alla egenskaper för en entitet. Det går också att välja en delmängd av en entitets egenskaper. Tabelltjänsten stöder också filtrering av frågeresultat med operatorn Where och anger hur många entiteter som ska returneras med operatorn Take .

Mer information om vilka LINQ-operatorer som stöds av tabelltjänsten finns i Frågeoperatorer som stöds för tabelltjänsten.

Projicera entitetsegenskaper

LINQ-satsen select kan användas för att projicera en delmängd av egenskaper från en entitet eller entiteter. Det maximala antalet egenskaper som kan projiceras är 255, vilket också är det maximala antalet egenskaper i en entitet.

Om du vill projicera en entitets egenskaper måste klienten ha stöd för OData Data Service version 3.0, vilket anges genom att ange antingen rubrikerna DataServiceVersion eller MaxDataServiceVersion enligt följande:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

I följande exempel visas hur du projicerar egenskaper från en enda entitet med hjälp av den nödvändiga objektinitieraren:

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

I följande exempel projiceras 3 egenskaper från en entitet som har 10 egenskaper. I det här exemplet SampleEntityär 's 10 egenskaper bokstäver från A till 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  
                                      };  

Du kan också projicera entitetsegenskaper med hjälp av frågealternativet $select i en REST-standardbegäran. Mer information finns i Fråga entiteter.

Mer information om entitetsprognoser och transformeringar finns i Välj systemfrågealternativ ($select) i OData-dokumentationen.

Returnerar de översta n entiteterna

Om du vill returnera n entiteter använder du LINQ-operatorn Take . Observera att det maximala antalet entiteter som kan returneras i en enda fråga är 1 000. Om du anger ett värde som är större än 1 000 för operatorn Take resulterar det i felkod 400 (felaktig begäran).

I följande exempel returneras de 10 översta entiteterna från en kundtabell:

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

Filtrera efter strängegenskaper

Följande exempel filtrerar på två strängegenskaper:

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

I följande exempel utförs prefixmatchning med hjälp av jämförelseoperatorer för att returnera entiteter med en LastName egenskap som börjar med bokstaven "A":

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

Filtrera efter numeriska egenskaper

I följande exempel returneras alla entiteter med en Age egenskap vars värde är större än 30:

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

Det här exemplet returnerar alla entiteter med en AmountDue egenskap vars värde är mindre än eller lika med 100,25:

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

Filtrera efter booleska egenskaper

I följande exempel returneras alla entiteter där IsActive egenskapen är inställd på true:

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

Filtrera efter DateTime-egenskaper

I följande exempel returneras entiteter där CustomerSince egenskapen är lika med 10 juli 2008:

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

Se även

Köra frågor mot tabeller och entiteter
Frågeoperatorer som stöds för tabelltjänsten