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.

Était-ce utile?

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:

msdn.microsoft.com/en-us/library/bb386969.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top