web-dev-qa-db-fra.com

DataTable ne contient pas de définition pour AsEnumerable

L'utilisation de linq pour interroger un datatable renvoie l'erreur suivante: CS0117: 'DataSet1.map DataTable' ne contient pas de définition pour 'AsEnumerable' 

Le projet inclut une référence pour System.Data.Datasetextensions. 

Voici le code.

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
using System.Data;
using System.Linq;
using System.Data.Linq;
using System.Data.Common;
using System.Data.DataSetExtensions;
using System.Linq.Expressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

protected void Page_Load(object sender, EventArgs e)
    {
        var query1 = from mfg_nm in DataSet1.mapDataTable.AsEnumerable()

                     select mfg_nm;
}

l’exécution de AsEnumerable () se traduit par

var query1 = from mfg_nm in DataSet1.mapDataTable

                     select mfg_nm;

CS1660: Impossible de convertir l'expression lambda en type 'chaîne' car il ne s'agit pas d'un type de délégué

merci d'avance pour votre aide

29
user1169290

La méthode que vous voulez se trouve dans l’espace de nom System.Data; la directive using convient donc, mais vous avez également besoin d’une référence au System.Data.DataSetExtensionsAssembly. Etes-vous sûr que vous avez cette référence en tant que référence Assembly?

Pourquoi vous avez une directive using pour System.Data.DataSetExtensionsnamespace - cela ne génère-t-il pas une erreur?

Quelle est l'erreur exacte avec l'appel AsEnumerable()? (Je suis surpris de l'erreur que vous obtenez avec le deuxième formulaire ... ce n'est pas l'erreur à laquelle je m'attendais.)

65
Jon Skeet

Dans tous les cas où cela se produit, la référence à System.Data.DataSetExtensions.dll était manquante. En cas de doute, essayez de créer un simple projet de console ciblant .NET 4 avec une référence à System.Data.DataSetExtensions.dll, pour vérifier que l'ajout de la référence fonctionne réellement.

Notez également que vous devez uniquement utiliser l'espace de noms System.Data.

BTW mapDataTable est un DataTable, non?

10
Panagiotis Kanavos

La recherche Google "system.data.datatable ne contient pas de définition de" comme nom ", m'a amené ici, et mon problème était absent:

using System.Data;

En raison de mon implémentation, le message d'erreur était un peu trompeur. Par conséquent, ma réponse à cette question. Le code était comme ...

public List<mytype> MyMethod(params) {
   return new mynamespace.myclasslib.myclass().GetDataTable(params).AsEnumerable()
      .etc
}

Une fois que j'ai essayé de déclarer explicitement le DataTable, il est devenu évident qu'il me manquait l'instruction using.

2
Adam Cox

 enter image description here J'ai reçu ce message d'erreur: 'System.Data.DataTable' ne contient pas de définition pour 'AsEnumerable' et aucune méthode d'extension 'AsEnumerable' n'accepte un premier argument de type 'System.Data.DataTable' (il vous manque une directive d'utilisation ou une référence d'assemblage?)

Ajoutée

using System.Data;

Ajout de "System.Data.DataSetExtensions" à la section Références. Cela a résolu le problème.

2
rjose