J'utilise Entity Framework dans mon code basé sur C #. Je me heurte à une étrangeté inattendue et cherche des suggestions.
Cas 1, 2, 3, 4 ... Projets:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll
Échantillons (tous 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 "bizarre":
RivWorks.Web.Service.dll (projet WCF)
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();
...
}
Je reçois cette erreur de compilation (le mot "où" est mis en évidence dans mon éditeur):
Impossible de convertir l'expression lambda en type 'chaîne' car ce n'est pas un type de délégué
Des idées ce qui causerait ceci?
Pour ceux intéressés par le résultat:
Il me manquait une simple instruction Using en tête de mon code.
using System.Linq;
Cela a réglé le problème.
Dans mon cas il manquait
using System.Data.Entity;
using System.Linq;
using System.Data.Entity;
Je me débattais avec cela dans un modèle de grille Telerik dans une vue rasoir pendant environ une heure. Dans mon cas, ceci:
columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>);
était censé être ceci:
columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>);
L'affaire sur "Id" était fausse! J'espère que ça aidera quelqu'un. Vous pourriez recevoir cette erreur simplement parce que vous avez mis une propriété inexistante!
Dans mon cas, j'ai eu le
Using System.Linq;
mais il me manquait le && après un élément de clause where.
Mauvais code:
item.Group.ID == grp.ID
p.Product_Status_Flag == 1 &&
item.Valid
Code correct (sans 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 du temps à quelqu'un.
Je suis tombé sur ceci et ai trouvé une solution différente. J'utilisais var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong");
et j'obtenais l'erreur mentionnée. L'erreur était que j'utilisais la méthode FullNameReverse()
en tant que propriété FullNameReverse
. Manqué le ()!!!
j'ai eu le même problème avec MVC 3 rasoir peut-être que quelqu'un a la même chose, donc je veux montrer comment le réparer dans mon stuation
List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32( list[0].Id))).ToList();
j'ai essayé d'utiliser contient mais par conséquent OgrenciId est int i obtenir l'erreur mentionnée ici, donc en utilisant égal, le problème est résolu
Le fil est un peu vieux, mais je viens juste de le rencontrer, et rien sur le net n'était la solution. Un site a mentionné ce qui a conduit à la réponse, à savoir un problème de type de données, mais malheureusement, je ne le retrouve pas encore. Je publie ici ma solution. Peut-être qu'un chercheur futur en tirera profit.
Original: IQueryable test = from r dans Records où r.Record_ID == 100, sélectionnez r;
où Records est un IQueryable résultant d’une expression LINQ antérieure.
Le correctif consiste à convertir les enregistrements: (IQueryable <record>) dans l’expression. Après l'avoir trouvé, c'est parfaitement logique. Les enregistrements ne sont pas saisis, donc le LINQ n'a aucune idée si r.Record_ID est valide. La confusion est le message d'erreur, qui apparaît partout sur le net dans des dizaines d'endroits, dans presque tous les cas, la solution étant l'une des deux clauses using manquantes. Le ou les deux que j'ai trouvés n'étaient pas un problème d'utilisation, ils ne se sont pas donné la peine de poster ce qui a été corrigé.
J'espère que cela t'aides...
Mon problème concernait le format:
.Columns(columns => {
columns.Bound(p => p.Id).Filterable(false);
columns.Bound(p => p.Name).Width(250);
...
Chaque personne qui avait cette erreur sur elle.
Il s’agissait d’un projet utilisant MVC et j’ai constaté que mon problème était d’avoir "public static int" ou "public static string" sur ces variables (Id, Nom, etc.) dans mon modèle. Quand j'ai supprimé "statique" sur toutes mes variables de modèle, je n'ai plus l'erreur. Ca me rendait fou pendant environ une journée ...
J'ai eu un problème similaire mais avec Rx et dans mon cas, en ajoutant
using System;
aidé. FWIW
Mess avec ces méthodes d'extension manquant est parfois trop ennuyeux.
J'ai eu ce problème dans une version légèrement différente.
Si vous appelez une méthode (statique) depuis l’intérieur de votre lambda, vérifiez son type de retour. Si le type de retour doit être un IEnumerable (ce qui est souvent le cas lorsque vous utilisez lambdas) mais que vous renvoyez un objet, vous avez évidemment un problème.
J'avais un problème similaire à la liaison des colonnes à une grille Telerik MVC .J'ai eu une propriété Id sur ma classe ViewModel. (Inspiré par la réponse de Chris ci-dessus) Je l'ai renommé XxxId et le problème a disparu. Il me semble rappeler quelque chose à propos de MVC faisant quelque chose de spécial pour les propriétés Id.
Dans mon cas, j'ai eu cette erreur en essayant d'utiliser Include dans clientContext.Load dans une application SharePoint 2014.
J'avais inclus la bibliothèque client Sharepoint comme ceci:
using SP = Microsoft.SharePoint.Client;
Pour résoudre ce problème, je l’ai aussi ajouté sans le namespace:
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
Essayez juste En utilisant System.Linq; Je pense que cela vous aidera à résoudre ces problèmes.