web-dev-qa-db-fra.com

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

J'utilise une expression LINQ lambda 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, j'obtiens l'erreur suivante:

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

98
Deep Sharma

Je pense qu'il vous manque using System.Linq; de cette classe système.

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

262
S. S. Rawat

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

94
skb

Mon cas a résolu que j'utilisais

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

en utilisant

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

va le résoudre

12
user4238584

S'il n'est pas lié à l'absence de directives d'utilisation déclarées par d'autres utilisateurs, cela se produira également s'il y a un autre problème avec votre requête.

Jetez un coup d’œil à la liste d’erreurs du compilateur VS: Par exemple, si la variable "Valeur" de votre requête n’existe pas, vous obtiendrez l’erreur "lambda à chaîne", ainsi que quelques erreurs reliées à l'inconnu/champ erroné.

Dans votre cas, cela pourrait être:

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

Les erreurs:

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

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

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

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

6
AFract

Pour les personnes qui tombent juste dessus par hasard maintenant, j’ai résolu une erreur de ce type, générée avec toutes les références et utilisant des instructions placées correctement. Il existe évidemment une certaine confusion avec la substitution dans une fonction qui renvoie DataTable au lieu de l’appeler sur un DataTable déclaré. Par exemple:

Cela a fonctionné pour moi:

DataTable dt = SomeObject.ReturnsDataTable();

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

Mais cela n'a pas:

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

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

3
Matthew