131 votes

Impossible de convertir une expression lambda en type 'string' car ce n'est pas un type de délégué

Je suis en train d'utiliser une expression lambda LINQ comme ceci :

int Value = 1;
qryContent objContentLine;

using (Entities db = new Entities())
{
    objContentLine = (from q in db.qryContents
                      where q.LineID == Value
                      orderby q.RowID descending
                      select q).FirstOrDefault();
}

Cependant, je reçois l'erreur suivante :

Impossible de convertir l'expression lambda en type 'string' car ce n'est pas un type de délégué

361voto

Subhash Points 1138

Je pense que vous avez oublié using System.Linq; dans cette classe de système.

et ajoutez également using System.Data.Entity; au code

99voto

skb Points 1118

Dans mon cas, j'ai dû ajouter using System.Data.Entity;

21voto

user4238584 Points 221

Mon problème est résolu, j'utilisais

@Html.DropDownList(model => model.TypeId ...)

en utilisant

@Html.DropDownListFor(model => model.TypeId ...)

cela le résoudra

9voto

Richard Points 832

Si ce n'est pas lié à des directives manquantes mentionnées par d'autres utilisateurs, cela se produira également s'il y a un autre problème avec votre requête.

Jetez un œil à la liste d'erreurs du compilateur VS : Par exemple, si la variable "Value" dans votre requête n'existe pas, vous aurez l'erreur "lambda to string", et quelques erreurs après une autre plus liée au champ inconnu/erroné.

Dans votre cas, cela pourrait être :

objContentLine = (from q in db.qryContents
                  where q.LineID == Value
                  orderby q.RowID descending
                  select q).FirstOrDefault();

Erreurs:

Erreur 241 Impossible de convertir une expression lambda en type 'string' car ce n'est pas un type de délégué

Erreur 242 Le délégué 'System.Func<..>' ne prend pas 1 argument

Erreur 243 Le nom 'Value' n'existe pas dans le contexte actuel

Corrigez l'erreur de la variable "Value" et les autres erreurs disparaîtront également.

5voto

Matthew Points 194

Pour les personnes qui viennent juste de tomber sur ceci, j'ai résolu une erreur de ce type qui était lancée avec toutes les références et les instructions "using" correctement placées. Il y a visiblement une certaine confusion avec la substitution d'une fonction qui renvoie un DataTable au lieu de l'appeler sur un DataTable déclaré. Par exemple:

Ceci a fonctionné pour moi:

DataTable dt = SomeObject.ReturnsDataTable();

List ls = dt.AsEnumerable().Select(dr => dr["name"].ToString()).ToList();

Mais ceci n'a pas fonctionné:

List ls = SomeObject.ReturnsDataTable().AsEnumerable().Select(dr => dr["name"].ToString()).ToList();

Je ne suis toujours pas sûr à 100% pourquoi, mais si quelqu'un est frustré par une erreur de ce type, essayez ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X