wake-up-neo.com

Entity Framework - Der Lambda-Ausdruck kann nicht in den Typ 'Zeichenfolge' konvertiert werden, da er kein Delegattyp ist

Ich verwende Entity Framework in meinem C # -basierten Code. Ich stoße auf eine unerwartete Komik und suche nach Vorschlägen.

Fall 1, 2, 3, 4 ... Projekte:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll 

Proben (alle diese Arbeiten):
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();
}

usw

Fall "Verrücktheit":
RivWorks.Web.Service.dll (WCF-Projekt)
Enthält die gleichen Referenzen wie die anderen Projekte.

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();
    ...
}

Ich erhalte diesen Fehler beim Kompilieren (das Wort "wo" wird in meinem Editor hervorgehoben):
Der Lambda-Ausdruck kann nicht in den Typ 'Zeichenfolge' konvertiert werden, da es sich nicht um einen Delegattyp handelt.

Irgendwelche Ideen, was dazu führen würde?

70
Keith Barrows

Für diejenigen, die am Ergebnis interessiert sind:
Mir fehlte eine einfache using-Anweisung am Anfang meines Codes.

using System.Linq;

Das hat es behoben.

110
Keith Barrows

In meinem Fall fehlte es 

using System.Data.Entity;

92
Miguel Galante
using System.Linq;
using System.Data.Entity;
9
Dorathoto

Ich hatte in einer Telerik-Raster-Vorlage in der Rasiermesseransicht eine Stunde lang damit zu kämpfen. In meinem Fall:

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

sollte das sein:

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

Der Fall zu "Id" war falsch! Ich hoffe das hilft jemandem. Möglicherweise erhalten Sie diese Fehlermeldung, nur weil Sie eine nicht vorhandene Eigenschaft eingeben.

7
Chris

In meinem Fall hatte ich die

Using System.Linq;

mir fehlte jedoch das && nach einer where-Klausel.

Bad Code:

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

Korrekter Code (ohne Fehler):

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

Ich hoffe, das erspart jemandem etwas Zeit.

7
jhamm

Ich stolperte darüber und fand eine andere Lösung. Ich habe var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong"); benutzt und den erwähnten Fehler erhalten. Der Fehler war, dass ich die Methode FullNameReverse() als Eigenschaft FullNameReverse verwendete. Verpasste das () !!!

2
FastDev

ich hatte das gleiche Problem mit dem MVC 3-Rasierer. Vielleicht hat jemand das gleiche, also möchte ich zeigen, wie ich es in meiner Studie beheben kann

List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32( list[0].Id))).ToList();

ich habe versucht, enthält zu verwenden, aber daher ist OgrenciId int. Ich bekomme den Fehler, der hier erwähnt wird

1
mathel

Thread ist ein bisschen alt, aber ich bin gerade erst darauf gestoßen und nichts im Netz war die Antwort. Eine Site erwähnte, was zu der Antwort geführt hat, was ein Datentypproblem war, aber leider kann ich sie nicht wieder finden. Ich poste meine Lösung hier. Vielleicht wird ein zukünftiger Sucher davon profitieren.

Original: IQueryable test = von r in Records, wobei r.Record_ID == 100 select r;

dabei ist Records ein IQueryable, das sich aus einem früheren LINQ-Expresson ergibt.

Das Update besteht darin, Records: (IQueryable <record>) Records im Ausdruck zu konvertieren. Wenn man es gefunden hat, ergibt es vollkommenen Sinn. Records ist nicht typisiert, so dass der LINQ keine Ahnung hat, ob r.Record_ID gültig ist. Die Verwirrung ist die Fehlermeldung, die an Dutzenden von Orten im ganzen Netz erscheint. In fast allen Fällen ist die Lösung eine der beiden fehlenden Verwendungsklauseln. Die ein oder zwei, die ich gefunden habe, waren kein Problem, sie haben sich nicht die Mühe gemacht, das Problem zu beheben.

Hoffe das hilft...

1
Ragnorok

Mein Problem betraf das Format:

.Columns(columns => {
    columns.Bound(p => p.Id).Filterable(false);
    columns.Bound(p => p.Name).Width(250);
    ...

Jeder p.What hatte diesen Fehler drauf.

Dies war ein Projekt, das MVC verwendete, und ich fand, dass mein Problem darin bestand, "public static int" oder "public static string" für diese Variablen (Id, Name usw.) in meinem Modell zu verwenden. Wenn ich bei allen Modellvariablen "statisch" entfernte, wurde der Fehler nicht mehr angezeigt. Hat mich für ungefähr einen Tag verrückt gemacht ...

0
vapcguy

Ich hatte ein ähnliches Problem, aber mit Rx und in meinem Fall hinzugefügt 

using System;

hat geholfen FWIW

Durcheinander mit diesen Erweiterungsmethoden zu vermissen ist manchmal zu nervig.

0
Valentin Kuzub

Ich hatte dieses Problem in einer etwas anderen Version.
Wenn Sie eine (statische) Methode aus Ihrem Lambda heraus aufrufen, überprüfen Sie den Rückgabetyp. Wenn der Rückgabetyp ein IEnumerable sein sollte (was häufig bei der Verwendung von Lambdas zutrifft), aber Sie geben Objekt zurück, haben Sie offensichtlich ein Problem.

0
Andi Truman

Ich hatte ein ähnliches Problem beim Binden von Spalten an ein MVC-Gitter von Telerik. Ich hatte eine Id-Eigenschaft in meiner ViewModel-Klasse. (Inspiriert von Chris 'Antwort oben) Ich habe es in XxxId umbenannt und das Problem ist verschwunden. Ich erinnere mich an etwas, das MVC für Id-Eigenschaften besonders macht.

0
Craig Fisher

In meinem Fall hatte ich diesen Fehler beim Versuch, Include in clientContext.Load in einer Sharepoint 2013-App zu verwenden.

Ich hatte die Sharepoint-Clientbibliothek wie folgt aufgenommen:

using SP = Microsoft.SharePoint.Client;

Zur Behebung habe ich es auch ohne den Namensraum hinzugefügt:

using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
0
Demelziraptor

Versuchen Sie es mit Mit System.Linq; Ich denke, es wird Ihnen helfen, diese Probleme zu lösen.

0
Jinto John