2010-06-12 6 views
4

. Je reçois cette erreur: "Impossible de convertir l'expression lambda en type 'chaîne' car ce n'est pas un type de délégué" - mot-clé select devient souligné en bleu Pouvez-vous s'il vous plaît avis.Comment résoudre cette erreur "Impossible de convertir l'expression lambda en type 'chaîne' car ce n'est pas un type de délégué"

Employee emp = new Employee(); 
    comHandledBySQt.DataSource = from x in emp.GetDataFromTable("1") 
        select new { x.Id, Name = x.FirstName + " " + x.LastName }; 
    comHandledBySQt.DisplayMember = "Name"; 
    comHandledBySQt.ValueMember = "Id"; 

code ci-dessus devrait affiche déposer la liste des employés prénom et nom dans une zone de liste déroulante

+0

Est-ce Vb.Net ou C#. Ne peut pas être les deux. – epitka

+0

Pouvez-vous créer un "var" avant d'affecter à la source de données et voir si l'erreur est la même? – epitka

Répondre

2

Si vous avez un jeu de données fortement typé, vous pouvez absolument effectuer une requête sur les membres nommés d'une table d'une manière proche de ce que vous avez essayé.

var queryA = (from x in dataSet.EmployeeTable 
         select new { x.Id, Name = x.FirstName + " " + x.LastName }).ToList(); 

De votre erreur donné, il ne semble pas que vous avez un ensemble de données fortement type, et il pourrait très bien être que votre valeur de retour n'est pas un DataSet mais juste un DataTable (au moins, de mon tentatives de recréer votre message d'erreur, je l'obtenais sur le DataTable et non l'ensemble). Mais sans un DataSet/DataTable fortement typé, c'est la requête que vous exécuterez.

var queryB = (from DataRow x in someSet.Tables[0].Rows 
      select new { Id = (string)x["Id"], Name = (string)x["FirstName"] + " " + (string)x["LastName"] }).ToList(); 

Notez que dans les deux cas vous devez inclure un appel .ToList(), sans que cela vous une autre erreur disant que le complexe nécessite une liaison de données IList ou IListSource, que la requête (sans ToList () appel) n'est ni.

+0

ne pas oublier de vérifier DBNull! –

2

x.Id pourrait devoir être fait une cession, par exemple.
select new { Id = x.Id, Name = string.Format("{0} {1}", x.FirstName, x.LastName) };

DataSet n'est pas dénombrable, donc si GetDataFromTable("1") retours DataSet, vous avez besoin d'énumérer sur l'ensemble/table résultat approprié, par exemple. GetDataFromTable("1").Tables[0] si vous avez seulement un ensemble de résultats.

Chaque élément de l'énumération sera alors un DataRow, qui a un index (plutôt que la propriété) accesseur: DataRow[columnIndex] ou DataRow[columnName].

+1

Ne fonctionne pas. Juste pour vous faire savoir GetDataFromTable renvoie DataSet. Je vais voir ce que je peux faire. Merci quand même. – peace

Questions connexes