77 votes

Entity Framework Ne peut pas convertir expression lambda de type 'string', car il n'est pas un type délégué

Je suis en utilisant Entity Framework dans mon C# en fonction du code. Je suis en cours d'exécution dans un inattendu étrangeté et suis à la recherche de suggestions.

Les cas 1, 2, 3, 4... Projets:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

Les échantillons (l'ensemble de ces travaux):
RivWorks.Alpha.dll:

public static bool EndNegotitation(long ProductID)
{
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == ProductID select a).FirstOrDefault();
...
}

RivWorks.Service.dll

public static RivWorks.Model.NegotiationAutos.AutoWithImage 
    GetProductById(long productId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.AutoID == productId select a;

    return myProduct.FirstOrDefault();
}
public static List<RivWorks.Model.NegotiationAutos.AutoWithImage> 
    GetProductByCompany(Guid companyId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.CompanyID == companyId select a;

    return myProduct.ToList();
}

etc

Cas "étrangeté":
RivWorks.Web.Service.dll WCF (projet)
Contient les mêmes références que les autres projets.

public NegotiateSetup GetSetup(string method, string jsonInput)
{
    ...
    long.TryParse(ProductID, out result);
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == result select a).FirstOrDefault();
    ...
}

J'obtiens cette erreur de compilation (le mot "où" est mis en surbrillance dans mon éditeur):
Impossible de convertir l'expression lambda de type 'string', car il n'est pas un type délégué

Les idées de ce que serait à l'origine?

117voto

Keith Barrows Points 6836

Pour ceux qui sont intéressés par le résultat:
J'ai été absent un simple à l'Aide de déclaration à la tête de mon code.

using System.Linq;

Ce fixe à droite.

106voto

Miguel Galante Points 595

Dans mon cas, c'était manquant

using System.Data.Entity;

7voto

jhamm Points 1031

Dans mon cas, j'ai eu l'

Using System.Linq;

mais j'ai été absent de la && après une clause where de l'élément.

Mauvais Code:

item.Group.ID == grp.ID
p.Product_Status_Flag == 1 &&
item.Valid

Le Code est Correct ( pas d'erreur ):

item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away.
p.Product_Status_Flag == 1 &&
item.Valid

J'espère que cela sauve quelqu'un certain temps.

7voto

Chris Points 3508

J'ai eu du mal avec ce dans un Telerik modèle de Grille à l'intérieur d'un Rasoir vue pendant environ une heure. Dans mon cas, c'est:

columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>);

était censé être présent:

columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>);

Le cas sur les "Id" est faux! J'espère que cela aide quelqu'un. Vous avez peut-être cette erreur juste parce que vous mettez une propriété qui n'existe pas!

2voto

FastDev Points 11

Je suis tombé sur ce et a trouvé un autre correctif. J'ai été en utilisant var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong"); et l'obtention de l'erreur mentionnée. L'erreur a été j'ai été en utilisant la méthode de FullNameReverse() que les biens FullNameReverse. Manquer la ()!!!

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