Partager via


Mettre en page d’importants ensembles de résultats avec QueryExpression

Dans Microsoft Dataverse, vous pouvez utiliser la fonctionnalité de cookie de pagination pour accélérer la pagination dans une application pour les grands ensembles de données. La fonctionnalité est disponible dans les requêtes FetchXML et QueryExpression. Lorsque vous utilisez la fonctionnalité de cookie de pagination lors de l’interrogation d’un ensemble de lignes de table (enregistrements), le résultat contient une valeur pour le cookie de pagination. Pour améliorer les performances du système, vous pouvez ensuite transmettre cette valeur lorsque vous récupérez le prochain ensemble de lignes.

QueryExpression et FetchXML utilisent différents formats pour leurs cookies de pagination. Si vous convertissez un format de requête en un autre format à l’aide du message QueryExpressionToFetchXmlRequest ou du message FetchXmlToQueryExpressionRequest, la valeur du cookie de pagination est ignorée. En outre, si vous demandez des pages non consécutives, la valeur du cookie de pagination est ignorée.

L’exemple suivant montre comment utiliser le cookie de pagination avec une expression de requête. Pour code exemple complet, consultez Exemple : Utiliser QueryExpression avec un cookie de pagination.

// Query using the paging cookie.
// Define the paging attributes.
// The number of records per page to retrieve.
int queryCount = 3;

// Initialize the page number.
int pageNumber = 1;

// Initialize the number of records.
int recordCount = 0;

// Define the condition expression for retrieving records.
ConditionExpression pagecondition = new ConditionExpression();
pagecondition.AttributeName = "parentaccountid";
pagecondition.Operator = ConditionOperator.Equal;
pagecondition.Values.Add(_parentAccountId);

// Define the order expression to retrieve the records.
OrderExpression order = new OrderExpression();
order.AttributeName = "name";
order.OrderType = OrderType.Ascending;

// Create the query expression and add condition.
QueryExpression pagequery = new QueryExpression();
pagequery.EntityName = "account";
pagequery.Criteria.AddCondition(pagecondition);
pagequery.Orders.Add(order);
pagequery.ColumnSet.AddColumns("name", "emailaddress1");                   

// Assign the pageinfo properties to the query expression.
pagequery.PageInfo = new PagingInfo();
pagequery.PageInfo.Count = queryCount;
pagequery.PageInfo.PageNumber = pageNumber;

// The current paging cookie. When retrieving the first page, 
// pagingCookie should be null.
pagequery.PageInfo.PagingCookie = null;
Console.WriteLine("Retrieving sample account records in pages...\n");
Console.WriteLine("#\tAccount Name\t\tEmail Address"); 

while (true)
{
    // Retrieve the page.
    EntityCollection results = _serviceProxy.RetrieveMultiple(pagequery);
    if (results.Entities != null)
    {
        // Retrieve all records from the result set.
        foreach (Account acct in results.Entities)
        {
            Console.WriteLine("{0}.\t{1}\t{2}", ++recordCount, acct.Name,
                               acct.EMailAddress1);
        }
    }

    // Check for more records, if it returns true.
    if (results.MoreRecords)
    {
        Console.WriteLine("\n****************\nPage number {0}\n****************", pagequery.PageInfo.PageNumber);
        Console.WriteLine("#\tAccount Name\t\tEmail Address");

        // Increment the page number to retrieve the next page.
        pagequery.PageInfo.PageNumber++;
        
        // Set the paging cookie to the paging cookie returned from current results.
        pagequery.PageInfo.PagingCookie = results.PagingCookie;
    }
    else
    {
        // If no more records are in the result nodes, exit the loop.
        break;
    }
}

Voir aussi

Générer des requêtes avec QueryExpression
Exemple : Utiliser QueryExpression avec un cookie de pagination
Utilisation de la classe QueryExpression
Paginer des résultats à l’aide de FetchXml

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).