Interroger dans un ensemble de données C #
-
14-11-2019 - |
Question
J'ai un ensemble de données ADO.NET qui est défini par une certaine requête, disons
SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION
Sans utiliser une clause où je dois dériver certains résultats de l'ensemble de données. Disons que je veux obtenir le nombre d'utilisateurs et de produits de l'utilisateur qui a le nombre maximal de produits. (Et je veux le faire en utilisant l'ensemble de données existant. Je ne peux pas dériver de cet de l'ensemble de données.)
Une idée d'un moyen de s'interroger à l'intérieur de l'ensemble de données? Puisqu'il y a des données, je pensais qu'il y avait un moyen de l'interroger.
La solution
Les requêtes SQL traditionnelles ne peuvent pas être appliquées à l'ensemble de données. Ce qui suit est Cependant, possible:
- Filtre des lignes en utilisant
DataTable.Select
. Voir ici Pour des informations détaillées sur les expressions dans les données. - Calculer les totaux, etc.
DataTable.Compute
. - Si ces deux-là ne font pas l'affaire, il y a toujours Linq.
Exemple Linq rapide et difficile: (qui ne renvoie pas de données, mais une liste contenant un type anonyme):
var joinedResult = dataTable1
// filtering:
.Select("MyColumn = 'value'")
// joining tables:
.Join(
dataTable2.AsEnumerable(),
row => row.Field<long>("PrimaryKeyField"),
row => row.Field<long?>("ForeignKeyField"),
// selecting a custom result:
(row1, row2) => new { AnotherColumn = row1.Field<string>("AnotherColumn") });
AsEnumerable
convertit un dataable en un IEnumerable
sur les requêtes LINQ peuvent être effectuées. Si vous êtes nouveau sur linq, consultez Cette introduction.
Autres conseils
Oui, vous pouvez utiliser DataTable.Select méthode.
DataTable table = DataSet1.Tables["Orders"];
// Presuming the DataTable has a column named Date.
string expression;
expression = "Date > #1/1/00#";
DataRow[] foundRows;
// Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression);
// Print column 0 of each returned row.
for(int i = 0; i < foundRows.Length; i ++)
{
Console.WriteLine(foundRows[i][0]);
}
Regarde aussi ce lien.
Vous pouvez faire des requêtes croisées d'un objet de jeu de données à l'aide de LINQ vers un ensemble de données: