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