Efektivní vytváření dotazů k vypsání prostředků BatchCreate queries to list Batch resources efficiently

Téměř všechny aplikace Batch musí provádět určitý typ monitorování nebo jiné operace, která se dotazuje na službu Batch, často v pravidelných intervalech.Nearly all Batch applications need to perform some type of monitoring or other operation that queries the Batch service, often at regular intervals. Například chcete-li zjistit, zda v úloze zbývá úlohy ve frontě, je nutné získat data pro každý úkol v rámci úlohy.For example, to determine whether there are any queued tasks remaining in a job, you must get data on every task in the job. Chcete-li zjistit stav uzlů ve fondu, je třeba získat data na každém uzlu ve fondu.To determine the status of nodes in your pool, you must get data on every node in the pool. Tento článek vysvětluje, jak provádět takové dotazy nejúčinnějším způsobem.This article explains how to execute such queries in the most efficient way.

Můžete zvýšit výkon aplikace Azure Batch tím, že omezíte množství dat, která služba vrátí, při dotazování úloh, úloh, výpočetních uzlů a dalších prostředků pomocí knihovny Batch .NET .You can increase your Azure Batch application's performance by reducing the amount of data that is returned by the service when you query jobs, tasks, compute nodes, and other resources with the Batch .NET library.

Poznámka

Služba Batch poskytuje podporu rozhraní API pro běžné scénáře počítání úloh v úloze a počítání výpočetních uzlů ve fondu služby Batch.The Batch service provides API support for the common scenarios of counting tasks in a job, and counting compute nodes in Batch pool. Místo použití dotazu na seznam pro tyto účely můžete zavolat operace získat počty úloh a počet uzlů výpisu fondu .Instead of using a list query for these, you can call the Get Task Counts and List Pool Node Counts operations. Tyto operace jsou efektivnější než dotaz na seznam, ale vracejí více omezené informace, které nemusí být vždy aktuální.These operations are more efficient than a list query, but return more limited information that may not always be up to date. Další informace najdete v tématu počítání úloh a výpočetních uzlů podle stavu.For more information, see Count tasks and compute nodes by state.

Zadat úroveň podrobnostíSpecify a detail level

V rámci výrobní dávkové aplikace můžou entity jako úlohy, úlohy a výpočetní uzly očíslovat v tisících.In a production Batch application, entities like jobs, tasks, and compute nodes can number in the thousands. Když si vyžádáte informace o těchto prostředcích, může se stát, že se z služby Batch od služby Batch do vaší aplikace na každém dotazu navzájem potenciálně velké množství dat.When you request information on these resources, a potentially large amount of data must "cross the wire" from the Batch service to your application on each query. Omezením počtu položek a typu informací, které je vráceno dotazem, můžete zvýšit rychlost dotazů, a tedy i výkon vaší aplikace.By limiting the number of items and type of information that is returned by a query, you can increase the speed of your queries, and therefore the performance of your application.

Tento fragment kódu pro dávku .NET API obsahuje všechny úlohy, které jsou přidružené k úloze, spolu se všemi vlastnostmi každé úlohy:This Batch .NET API code snippet lists every task that is associated with a job, along with all of the properties of each task:

// Get a collection of all of the tasks and all of their properties for job-001
IPagedEnumerable<CloudTask> allTasks =
    batchClient.JobOperations.ListTasks("job-001");

Můžete použít mnohem efektivnější dotaz na seznam, ale použitím "úrovně podrobností" na dotaz.You can perform a much more efficient list query, however, by applying a "detail level" to your query. Provedete to tak, že zadáte objekt ODATADetailLevel do metody JobOperations. ListTasks .You do this by supplying an ODATADetailLevel object to the JobOperations.ListTasks method. Tento fragment kódu vrátí pouze vlastnosti informací o dokončených úkolech ID, příkazového řádku a výpočetního uzlu:This snippet returns only the ID, command line, and compute node information properties of completed tasks:

// Configure an ODATADetailLevel specifying a subset of tasks and
// their properties to return
ODATADetailLevel detailLevel = new ODATADetailLevel();
detailLevel.FilterClause = "state eq 'completed'";
detailLevel.SelectClause = "id,commandLine,nodeInfo";

// Supply the ODATADetailLevel to the ListTasks method
IPagedEnumerable<CloudTask> completedTasks =
    batchClient.JobOperations.ListTasks("job-001", detailLevel);

V tomto ukázkovém scénáři platí, že pokud je v úloze tisíce úkolů, výsledky z druhého dotazu se většinou vrátí mnohem rychleji než první.In this example scenario, if there are thousands of tasks in the job, the results from the second query will typically be returned much quicker than the first. Další informace o použití ODATADetailLevel při výpisu položek pomocí rozhraní Batch .NET API je obsaženo níže.More information about using ODATADetailLevel when you list items with the Batch .NET API is included below.

Důležité

Důrazně doporučujeme, abyste vždy zadali objekt ODATADetailLevel do vašeho seznamu volání rozhraní .NET API, abyste zajistili maximální efektivitu a výkon vaší aplikace.We highly recommend that you always supply an ODATADetailLevel object to your .NET API list calls to ensure maximum efficiency and performance of your application. Zadáním úrovně podrobností můžete pomoci snížit dobu odezvy služby Batch, zlepšit využití sítě a minimalizovat využití paměti klientskými aplikacemi.By specifying a detail level, you can help to lower Batch service response times, improve network utilization, and minimize memory usage by client applications.

Filtrovat, vybrat a rozbalitFilter, select, and expand

Rozhraní REST API služby Batch .NET a Batch poskytují možnost omezit počet položek, které jsou vráceny v seznamu, a také množství informací, které jsou pro každý z nich vráceny.The Batch .NET and Batch REST APIs provide the ability to reduce both the number of items that are returned in a list, as well as the amount of information that is returned for each. Provedete to tak, že zadáte Filter, Selecta rozbalíte řetězce při provádění dotazů seznamu.You do so by specifying filter, select, and expand strings when performing list queries.

FiltrováníFilter

Řetězec filtru je výraz, který snižuje počet vrácených položek.The filter string is an expression that reduces the number of items that are returned. Můžete například vypsat pouze spuštěné úlohy pro úlohu nebo zobrazit seznam pouze výpočetních uzlů, které jsou připraveny ke spouštění úkolů.For example, you can list only the running tasks for a job, or list only compute nodes that are ready to run tasks.

Řetězec filtru se skládá z jednoho nebo více výrazů s výrazem, který se skládá z názvu vlastnosti, operátoru a hodnoty.The filter string consists of one or more expressions, with an expression that consists of a property name, operator, and value. Vlastnosti, které lze zadat, jsou specifické pro každý typ entity, který se dotazuje, stejně jako operátory podporované pro jednotlivé vlastnosti.The properties that can be specified are specific to each entity type that you query, as are the operators that are supported for each property. Více výrazů lze kombinovat pomocí logických operátorů and a or .Multiple expressions can be combined by using the logical operators and and or.

V tomto příkladu řetězce filtru se zobrazí pouze spuštěné úlohy vykreslení: (state eq 'running') and startswith(id, 'renderTask') .This example filter string lists only the running "render" tasks: (state eq 'running') and startswith(id, 'renderTask').

VyberteSelect

Řetězec Select omezuje hodnoty vlastností, které jsou vráceny pro každou položku.The select string limits the property values that are returned for each item. Zadejte seznam názvů vlastností oddělených čárkami a pro položky ve výsledcích dotazu jsou vráceny pouze tyto hodnoty vlastností. Můžete zadat libovolnou vlastnost pro typ entity, který se dotazuje.You specify a list of comma-separated property names, and only those property values are returned for the items in the query results.You can specify any of the properties for the entity type you are querying.

Tento příklad výběru řetězce určuje, že pro každý úkol by měly být vráceny pouze tři hodnoty vlastností: id, state, stateTransitionTime .This example select string specifies that only three property values should be returned for each task: id, state, stateTransitionTime.

RozbalitExpand

Řetězec expand omezuje počet volání rozhraní API potřebných k získání určitých informací.The expand string reduces the number of API calls that are required to obtain certain information. Když použijete expandující řetězec, můžete získat další informace o jednotlivých položkách s jedním voláním rozhraní API.When you use an expand string, more information about each item can be obtained with a single API call. Místo toho, abyste získali seznam entit a požadovali informace pro každou položku v seznamu, můžete použít rozbalení řetězce a získat stejné informace v jediném volání rozhraní API, což pomáhá zvýšit výkon snížením počtu volání rozhraní API.Rather than first obtaining the list of entities, then requesting information for each item in the list, you use an expand string to obtain the same information in a single API call, helping to improve performance by reducing API calls.

Podobně jako u řetězce příkazu SELECT určuje řetězec expand, zda jsou určitá data součástí výsledků dotazu seznamu.Similar to the select string, the expand string controls whether certain data is included in list query results. Pokud jsou vyžadovány všechny vlastnosti a není zadán žádný řetězec SELECT, je nutné k získání informací o statistice použít řetězec pro rozbalení.When all properties are required and no select string is specified, the expand string must be used to get statistics information. Je-li pro získání podmnožiny vlastností použit řetězec SELECT, stats lze jej zadat v řetězci Select a řetězec rozbalení není nutné zadávat.If a select string is used to obtain a subset of properties, then stats can be specified in the select string, and the expand string does not need to be specified.

Řetězec rozbalení se podporuje jenom v případě, že se používá při výpisu úloh, plánů úloh, úloh a fondů.The expand string is only supported when it is used in listing jobs, job schedules, tasks, and pools. V současné době podporuje jenom informace o statistice.Currently, it only supports statistics information.

Tento příklad rozbalení řetězce určuje, že se mají pro každou položku v seznamu vracet informace o statistice: stats .This example expand string specifies that statistics information should be returned for each item in the list: stats.

Poznámka

Při sestavování kteréhokoliv ze tří typů řetězce dotazu (Filter, Select a expand) je nutné zajistit, aby názvy vlastností a velikost písmen odpovídaly jejich REST APIm prvkům.When constructing any of the three query string types (filter, select, and expand), you must ensure that the property names and case match that of their REST API element counterparts. Například při práci s třídou .NET CloudTask je nutné zadat stav místo stavu, i když vlastnost .NET je CloudTask. State.For example, when working with the .NET CloudTask class, you must specify state instead of State, even though the .NET property is CloudTask.State. V následujících tabulkách najdete mapování vlastností rozhraní .NET a rozhraní REST API.See the tables below for property mappings between the .NET and REST APIs.

Pravidla pro filtrování, výběr a rozbalení řetězcůRules for filter, select, and expand strings

  • Vlastnosti v části filtrovat, vybrat a rozšířit řetězce by se měly zobrazovat stejně jako v rozhraní REST API pro Batch, a to i v případě, že používáte Batch .NET nebo jednu z dalších sad SDK pro sadu Batch.Properties names in filter, select, and expand strings should appear as they do in the Batch REST API, even when you use Batch .NET or one of the other Batch SDKs.

  • U všech názvů vlastností se rozlišují velká a malá písmena, ale v hodnotách vlastností se nerozlišují malá a velká písmena.All property names are case-sensitive, but property values are case insensitive.

  • Řetězce data a času mohou být v jednom ze dvou formátů a musí předcházet DateTime .Date/time strings can be one of two formats, and must be preceded with DateTime.

    • Příklad formátu W3C-DTF: creationTime gt DateTime'2011-05-08T08:49:37Z'W3C-DTF format example: creationTime gt DateTime'2011-05-08T08:49:37Z'
    • Příklad formátu RFC 1123: creationTime gt DateTime'Sun, 08 May 2011 08:49:37 GMT'RFC 1123 format example: creationTime gt DateTime'Sun, 08 May 2011 08:49:37 GMT'
  • Logické řetězce jsou buď true nebo false .Boolean strings are either true or false.

  • Pokud je zadána neplatná vlastnost nebo operátor, 400 (Bad Request) bude výsledkem chyba.If an invalid property or operator is specified, a 400 (Bad Request) error will result.

Efektivní dotazování v dávce .NETEfficient querying in Batch .NET

V rozhraní Batch .NET API se třída ODATADetailLevel používá k poskytnutí filtru, výběru a rozbalení řetězců k vypsání operací.Within the Batch .NET API, the ODATADetailLevel class is used for supplying filter, select, and expand strings to list operations. Třída ODataDetailLevel má tři vlastnosti veřejných řetězců, které lze zadat v konstruktoru nebo nastavit přímo na objekt.The ODataDetailLevel class has three public string properties that can be specified in the constructor, or set directly on the object. Pak předáte objekt ODataDetailLevel jako parametr do různých operací seznamu, jako je například ListPools, ListJobsa ListTasks.You then pass the ODataDetailLevel object as a parameter to the various list operations such as ListPools, ListJobs, and ListTasks.

Následující fragment kódu používá rozhraní Batch .NET API k efektivnímu dotazování služby Batch na statistiky konkrétní sady fondů.The following code snippet uses the Batch .NET API to efficiently query the Batch service for the statistics of a specific set of pools. V tomto scénáři má uživatel dávky testovací i výrobní fondy.In this scenario, the Batch user has both test and production pools. ID fondů testů s předponou "test" a ID fondu výroby mají předponu "prod".The test pool IDs are prefixed with "test", and the production pool IDs are prefixed with "prod". Ve fragmentu kódu je myBatchClient správně inicializovaná instance třídy BatchClient .In the snippet, myBatchClient is a properly initialized instance of the BatchClient class.

// First we need an ODATADetailLevel instance on which to set the filter, select,
// and expand clause strings
ODATADetailLevel detailLevel = new ODATADetailLevel();

// We want to pull only the "test" pools, so we limit the number of items returned
// by using a FilterClause and specifying that the pool IDs must start with "test"
detailLevel.FilterClause = "startswith(id, 'test')";

// To further limit the data that crosses the wire, configure the SelectClause to
// limit the properties that are returned on each CloudPool object to only
// CloudPool.Id and CloudPool.Statistics
detailLevel.SelectClause = "id, stats";

// Specify the ExpandClause so that the .NET API pulls the statistics for the
// CloudPools in a single underlying REST API call. Note that we use the pool's
// REST API element name "stats" here as opposed to "Statistics" as it appears in
// the .NET API (CloudPool.Statistics)
detailLevel.ExpandClause = "stats";

// Now get our collection of pools, minimizing the amount of data that is returned
// by specifying the detail level that we configured above
List<CloudPool> testPools =
    await myBatchClient.PoolOperations.ListPools(detailLevel).ToListAsync();

Tip

Instance ODATADetailLevel , která je nakonfigurována pomocí klauzulí Select a expand, lze také předat příslušným metodám Get, jako je například PoolOperations. getpool, pro omezení množství vrácených dat.An instance of ODATADetailLevel that is configured with Select and Expand clauses can also be passed to appropriate Get methods, such as PoolOperations.GetPool, to limit the amount of data that is returned.

Mapování dávek z dávky do rozhraní .NET APIBatch REST to .NET API mappings

Názvy vlastností ve filtru, Select a rozbalte řetězce musí odrážet jejich REST API protějšky v názvu i v případě.Property names in filter, select, and expand strings must reflect their REST API counterparts, both in name and case. Níže uvedené tabulky poskytují mapování mezi partnery .NET a REST API.The tables below provide mappings between the .NET and REST API counterparts.

Mapování pro řetězce filtruMappings for filter strings

  • Metody seznamu .NET: každá z metod rozhraní .NET API v tomto sloupci přijímá objekt ODATADetailLevel jako parametr..NET list methods: Each of the .NET API methods in this column accepts an ODATADetailLevel object as a parameter.
  • Požadavky na seznam REST: každá REST APIová stránka propojená s v tomto sloupci obsahuje tabulku, která určuje vlastnosti a operace, které jsou povoleny v řetězcích filtrů .REST list requests: Each REST API page linked to in this column contains a table that specifies the properties and operations that are allowed in filter strings. Tyto názvy vlastností a operace použijete při vytváření řetězce ODATADetailLevel. FilterClause .You use these property names and operations when you construct an ODATADetailLevel.FilterClause string.
Metody seznamu .NET.NET list methods Žádosti seznamu RESTREST list requests
Metodu certificateoperations. ListCertificatesCertificateOperations.ListCertificates Výpis certifikátů v účtuList the certificates in an account
CloudTask. ListNodeFilesCloudTask.ListNodeFiles Seznam souborů přidružených k úlozeList the files associated with a task
JobOperations. ListJobPreparationAndReleaseTaskStatusJobOperations.ListJobPreparationAndReleaseTaskStatus Seznam stavů úloh přípravy úlohy a úkolů uvolnění úloh pro úlohuList the status of the job preparation and job release tasks for a job
JobOperations. ListJobsJobOperations.ListJobs Výpis úloh v účtuList the jobs in an account
JobOperations. ListNodeFilesJobOperations.ListNodeFiles Výpis souborů na uzluList the files on a node
JobOperations. ListTasksJobOperations.ListTasks Seznam úloh přidružených k úlozeList the tasks associated with a job
JobScheduleOperations.ListJobSchedulesJobScheduleOperations.ListJobSchedules Výpis plánů úloh v účtuList the job schedules in an account
JobScheduleOperations.ListJobsJobScheduleOperations.ListJobs Seznam úloh přidružených k plánu úlohyList the jobs associated with a job schedule
PoolOperations. ListComputeNodesPoolOperations.ListComputeNodes Výpis výpočetních uzlů ve fonduList the compute nodes in a pool
PoolOperations. ListPoolsPoolOperations.ListPools Výpis fondů v účtuList the pools in an account

Mapování pro vybrané řetězceMappings for select strings

  • Typy Batch .NET: typy rozhraní API pro Batch .NET.Batch .NET types: Batch .NET API types.
  • REST API entit: každá stránka v tomto sloupci obsahuje jednu nebo více tabulek, které obsahují seznam názvů vlastností REST API pro daný typ.REST API entities: Each page in this column contains one or more tables that list the REST API property names for the type. Tyto názvy vlastností se používají při vytváření řetězců Select .These property names are used when you construct select strings. Tyto stejné názvy vlastností můžete použít při vytváření řetězce ODATADetailLevel. SelectClause .You use these same property names when you construct an ODATADetailLevel.SelectClause string.
Typy Batch .NETBatch .NET types REST API entitREST API entities
CertifikátCertificate Získání informací o certifikátuGet information about a certificate
Vlastnosti cloudjobCloudJob Získání informací o úlozeGet information about a job
CloudJobScheduleCloudJobSchedule Získat informace o plánu úlohyGet information about a job schedule
Metodu computenodeComputeNode Získání informací o uzluGet information about a node
CloudPoolCloudPool Získat informace o fonduGet information about a pool
CloudTaskCloudTask Získání informací o úkoluGet information about a task

Příklad: vytvoření řetězce filtruExample: construct a filter string

Při vytváření řetězce filtru pro ODATADetailLevel. FilterClausesi v tabulce výše v části "mapování pro řetězce filtru" vyhledejte stránku dokumentace REST API, která odpovídá operaci seznamu, kterou chcete provést.When you construct a filter string for ODATADetailLevel.FilterClause, consult the table above under "Mappings for filter strings" to find the REST API documentation page that corresponds to the list operation that you wish to perform. Vlastnosti Filtered a jejich podporované operátory najdete na této stránce v první tabulce násobení.You will find the filterable properties and their supported operators in the first multirow table on that page. Pokud chcete načíst všechny úlohy, jejichž ukončovací kód byl nenulový, například tento řádek v seznamu úkolů přidružených k úloze určuje příslušný řetězec vlastnosti a přípustné operátory:If you wish to retrieve all tasks whose exit code was nonzero, for example, this row on List the tasks associated with a job specifies the applicable property string and allowable operators:

VlastnostProperty Povolené operaceOperations allowed TypType
executionInfo/exitCode eq, ge, gt, le , lt Int

Proto řetězec filtru pro výpis všech úkolů s nenulovým ukončovacím kódem by byl:Thus, the filter string for listing all tasks with a nonzero exit code would be:

(executionInfo/exitCode lt 0) or (executionInfo/exitCode gt 0)

Příklad: vytvoření řetězce výběruExample: construct a select string

Chcete-li vytvořit ODATADetailLevel. SelectClause, přečtěte si výše v tabulce "mapování pro vybrané řetězce" a přejděte na stránku REST API, která odpovídá typu entity, kterou zadáváte.To construct ODATADetailLevel.SelectClause, consult the table above under "Mappings for select strings" and navigate to the REST API page that corresponds to the type of entity that you are listing. V první tabulce násobení na této stránce najdete vlastnosti umožňující výběr a jejich podporované operátory.You will find the selectable properties and their supported operators in the first multirow table on that page. Pokud chcete načíst pouze ID a příkazový řádek pro každý úkol v seznamu, najdete například tyto řádky v příslušné tabulce pro získání informací o úkolu:If you wish to retrieve only the ID and command line for each task in a list, for example, you will find these rows in the applicable table on Get information about a task:

VlastnostProperty TypType PoznámkyNotes
id String The ID of the task.
commandLine String The command line of the task.

Řetězec SELECT pro zahrnutí pouze ID a příkazového řádku s každým uvedeným úkolem by pak byl:The select string for including only the ID and command line with each listed task would then be:

id, commandLine

Ukázky kódůCode samples

Ukázka kódu efektivních dotazů na seznamEfficient list queries code sample

Vzorový projekt EfficientListQueries na GitHubu ukazuje, jak efektivní dotazování na seznam může ovlivnit výkon v aplikaci.The EfficientListQueries sample project on GitHub shows how efficient list querying can affect performance in an application. Tato Konzolová aplikace v jazyce C# vytvoří a přidá do úlohy velký počet úkolů.This C# console application creates and adds a large number of tasks to a job. Pak provede více volání metody JobOperations. ListTasks a předá objekty ODATADetailLevel , které jsou nakonfigurovány s různými hodnotami vlastností, aby se lišilo množství dat, která mají být vrácena.Then, it makes multiple calls to the JobOperations.ListTasks method and passes ODATADetailLevel objects that are configured with different property values to vary the amount of data to be returned. Vytváří výstup podobný následujícímu:It produces output similar to the following:

Adding 5000 tasks to job jobEffQuery...
5000 tasks added in 00:00:47.3467587, hit ENTER to query tasks...

4943 tasks retrieved in 00:00:04.3408081 (ExpandClause:  | FilterClause: state eq 'active' | SelectClause: id,state)
0 tasks retrieved in 00:00:00.2662920 (ExpandClause:  | FilterClause: state eq 'running' | SelectClause: id,state)
59 tasks retrieved in 00:00:00.3337760 (ExpandClause:  | FilterClause: state eq 'completed' | SelectClause: id,state)
5000 tasks retrieved in 00:00:04.1429881 (ExpandClause:  | FilterClause:  | SelectClause: id,state)
5000 tasks retrieved in 00:00:15.1016127 (ExpandClause:  | FilterClause:  | SelectClause: id,state,environmentSettings)
5000 tasks retrieved in 00:00:17.0548145 (ExpandClause: stats | FilterClause:  | SelectClause: )

Sample complete, hit ENTER to continue...

Jak je znázorněno v uplynulých časech, můžete výrazně snížit dobu odezvy na dotazy omezením vlastností a počtu vrácených položek.As shown in the elapsed times, you can greatly lower query response times by limiting the properties and the number of items that are returned. Tento a další ukázkové projekty najdete v úložišti Azure-Batch-Samples na GitHubu.You can find this and other sample projects in the azure-batch-samples repository on GitHub.

Ukázka knihovny a kódu BatchMetricsBatchMetrics library and code sample

Kromě výše uvedeného příkladu kódu EfficientListQueries ukázkový projekt BatchMetrics ukazuje, jak efektivně monitorovat průběh úloh Azure Batch pomocí rozhraní API pro Batch.In addition to the EfficientListQueries code sample above, the BatchMetrics sample project demonstrates how to efficiently monitor Azure Batch job progress using the Batch API.

Ukázka BatchMetrics zahrnuje projekt knihovny tříd .NET, který můžete začlenit do svých vlastních projektů, a jednoduchý program příkazového řádku pro cvičení a demonstraci použití knihovny.The BatchMetrics sample includes a .NET class library project which you can incorporate into your own projects, and a simple command-line program to exercise and demonstrate the use of the library.

Ukázková aplikace v rámci projektu ukazuje následující operace:The sample application within the project demonstrates the following operations:

  1. Výběr konkrétních atributů, aby se stáhly jenom vlastnosti, které potřebujeteSelecting specific attributes in order to download only the properties you need
  2. Filtrování časů přechodu stavu za účelem stažení pouze změn od posledního dotazuFiltering on state transition times in order to download only changes since the last query

Například následující metoda se zobrazí v knihovně BatchMetrics.For example, the following method appears in the BatchMetrics library. Vrátí ODATADetailLevel, který určuje, že se id state mají získat pouze vlastnosti a pro entity, které jsou dotazovány.It returns an ODATADetailLevel that specifies that only the id and state properties should be obtained for the entities that are queried. Také určuje, že by měly být vráceny pouze entity, jejichž stav byl změněn, protože DateTime by měl být vrácen zadaný parametr.It also specifies that only entities whose state has changed since the specified DateTime parameter should be returned.

internal static ODATADetailLevel OnlyChangedAfter(DateTime time)
{
    return new ODATADetailLevel(
        selectClause: "id, state",
        filterClause: string.Format("stateTransitionTime gt DateTime'{0:o}'", time)
    );
}

Další krokyNext steps