Maîtriser les requêtes LINQ sur les DataTables en C#

Travailler avec des données en C# nécessite souvent des capacités de requête efficaces pour récupérer et manipuler l’information de manière transparente. Une méthode populaire pour interroger des données dans .NET est via les Requêtes Intégrées au Langage (LINQ). Cependant, lorsque vous vous occupez d’un objet DataTable, vous pouvez rencontrer certains défis en essayant d’effectuer des requêtes LINQ directement. Si vous vous êtes déjà senti perplexe à ce sujet, lisez la suite alors que nous décomposons comment exécuter efficacement des requêtes LINQ sur un DataTable.

Comprendre le Problème

Bien que LINQ soit conçu pour fonctionner avec diverses sources de données, interroger un DataTable n’est pas aussi simple qu’il n’y paraît. Par exemple, essayer d’exécuter une requête similaire à celle ci-dessous entraînera des erreurs :

var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;

Ce code ne fonctionne pas car la DataRowCollection n’implémente pas IEnumerable<T>, ce qui est nécessaire pour les requêtes LINQ.

La Solution : Utiliser AsEnumerable()

Pour faire fonctionner LINQ avec un DataTable, vous devez tirer parti de la méthode d’extension AsEnumerable() fournie au DataTable. Cette méthode convertit les lignes du DataTable en un IEnumerable<DataRow>. Voici comment vous pouvez effectuer votre requête LINQ avec succès :

Exécution de Requête Étape par Étape

  1. Importer l’Espace de Noms Requis Assurez-vous d’avoir l’espace de noms approprié en incluant une référence à System.Data.DataSetExtensions. Cela est généralement nécessaire pour accéder à la fonctionnalité LINQ avec DataTable.

  2. Utiliser AsEnumerable() pour les Requêtes Au lieu d’essayer d’interroger directement la collection Rows, appelez d’abord AsEnumerable() sur le DataTable. Voici un exemple de code :

    var results = from myRow in myDataTable.AsEnumerable()
                  where myRow.Field<int>("RowNo") == 1
                  select myRow;
    
  3. Alternative avec Expression Lambda Si vous préférez utiliser des expressions lambda, c’est également possible. La requête équivalente en syntaxe lambda est la suivante :

    var result = myDataTable
        .AsEnumerable()
        .Where(myRow => myRow.Field<int>("RowNo") == 1);
    

Conversion Retour à DataTable

Si vous souhaitez convertir les résultats de nouveau en un DataTable, vous pouvez utiliser l’extension CopyToDataTable() :

DataTable filteredTable = result.CopyToDataTable();

Conclusion

Effectuer une requête LINQ sur un DataTable en C# peut sembler un peu délicat au début, mais avec la bonne approche utilisant la méthode AsEnumerable(), vous pouvez manipuler vos données efficacement. Que vous utilisiez la syntaxe de requête ou les expressions lambda, LINQ est un outil puissant qui peut améliorer votre expérience de gestion des données.

En comprenant ces méthodes, vous pouvez garantir des flux de travail fluides lors de la manipulation de tables de données dans vos applications. Pour un apprentissage approfondi, explorez diverses méthodes et pratiques LINQ pour tirer le plein potentiel de C#.