Ich verwende Entity Framework in meinem C # -basierten Code. Ich stoße auf eine unerwartete Verrücktheit und suche nach Vorschlägen.
Fall 1, 2, 3, 4 ... Projekte:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll
Beispiele (all 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();
}
etc
Fall "Verrücktheit":
RivWorks.Web.Service.dll (WCF-Projekt)
Enthält dieselben 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 bei der Kompilierung (das Wort "where" wird in meinem Editor hervorgehoben): Der
Lambda-Ausdruck kann nicht in den Typ "string" konvertiert werden, da es sich nicht um einen Delegatentyp handelt
Irgendwelche Ideen, was das verursachen würde?
c#
.net
entity-framework
lambda
Keith Barrows
quelle
quelle
FirstOrDefault
Was passiert, wenn Sie den Anruf entfernen ? Natürlich wird es fehlschlagen, wenn Sie versuchen, esproduct
später zu verwenden , aber wird diese Anweisung kompiliert?var product = _dbFeed.AutoWithImage.Where(a => a.AutoID == result);
was passiert dann? Lassen Sie uns Abfrageausdrücke aus der Mischung nehmen ...Antworten:
Für diejenigen, die am Ergebnis interessiert sind:
Mir fehlte eine einfache Using-Anweisung am Anfang meines Codes.
using System.Linq;
Dies hat es richtig behoben.
quelle
In meinem Fall fehlte es
using System.Data.Entity;
quelle
using System.Linq; using System.Data.Entity;
quelle
In meinem Fall hatte ich die
aber mir fehlte das && nach einem where-Klauselelement.
Schlechter Code:
item.Group.ID == grp.ID p.Product_Status_Flag == 1 && item.Valid
Richtiger 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 spart jemandem etwas Zeit.
quelle
Ich hatte ungefähr eine Stunde lang Probleme damit in einer Telerik Grid-Vorlage in einer Razor-Ansicht. In meinem Fall ist dies:
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 auf "Id" war falsch! Ich hoffe das hilft jemandem. Möglicherweise wird dieser Fehler angezeigt, nur weil Sie eine nicht vorhandene Eigenschaft eingefügt haben!
quelle
Ich bin darauf gestoßen und habe eine andere Lösung gefunden. Ich habe
var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong");
den genannten Fehler verwendet und erhalten. Der Fehler war, dass ich die MethodeFullNameReverse()
als Eigenschaft verwendeteFullNameReverse
. Verpasste die () !!!quelle
ich hatte das gleiche problem mit mvc 3 rasiermesser vielleicht hat jemand das gleiche, also möchte ich zeigen, wie ich es in meiner stuation 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 hier erwähnten Fehler, so dass durch die Verwendung von gleich das Problem gelöst wird
quelle
Thread ist ein bisschen alt, aber ich bin gerade erst darauf gestoßen, und nichts im Netz war die Antwort. Auf einer Website wurde erwähnt, was zu der Antwort geführt hat, bei der es sich um ein Datentypproblem handelte. Leider kann ich es nicht wiederfinden. Daher veröffentliche ich meine Lösung hier. Vielleicht wird ein zukünftiger Sucher davon profitieren.
Original: IQueryable test = from r in Datensätzen, in denen r.Record_ID == 100 r auswählen;
Dabei ist Records eine IQueryable, die aus einem vorherigen LINQ-Expresson resultiert.
Das Update besteht darin, Records: (IQueryable <record>) Records in den Ausdruck umzuwandeln. Nachdem es gefunden wurde, macht es vollkommen Sinn. Datensätze werden nicht eingegeben, sodass der LINQ keine Ahnung hat, ob r.Record_ID gültig ist. Die Verwirrung ist die Fehlermeldung, die an Dutzenden von Stellen im ganzen Netz erscheint. In fast allen Fällen ist die Lösung eine der beiden fehlenden Klauseln. Die ein oder zwei, bei denen ich festgestellt habe, dass sie kein Problem darstellen, haben sich nicht die Mühe gemacht, zu veröffentlichen, was das Problem behoben hat.
Hoffe das hilft...
quelle
Ich hatte ein ähnliches Problem beim Binden von Spalten an ein Telerik MVC Grid. 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 über MVC, das etwas Besonderes für ID-Eigenschaften tut.
quelle
Ich hatte ein ähnlich aussehendes Problem, aber mit Rx und in meinem Fall Hinzufügen
using System;
geholfen. FWIW
Das Durcheinander mit diesen fehlenden Erweiterungsmethoden ist manchmal zu ärgerlich.
quelle
In meinem Fall trat dieser Fehler auf, als ich versuchte, Include in clientContext.Load in einer Sharepoint 2013-App zu verwenden.
Ich hatte die Sharepoint-Clientbibliothek folgendermaßen aufgenommen:
using SP = Microsoft.SharePoint.Client;
Um dies zu beheben, habe ich es zusätzlich auch ohne den Namespace hinzugefügt:
using Microsoft.SharePoint.Client; using SP = Microsoft.SharePoint.Client;
quelle
Mein Problem betraf das Format:
.Columns(columns => { columns.Bound(p => p.Id).Filterable(false); columns.Bound(p => p.Name).Width(250); ...
Was auch immer dieser Fehler hatte.
Dies war ein Projekt mit MVC, und ich stellte fest, dass mein Problem darin bestand, dass diese Variablen (ID, Name usw.) in meinem Modell "public static int" oder "public static string" enthielten. Als ich "statisch" für alle meine Modellvariablen entfernt habe, wurde der Fehler nicht mehr angezeigt. Hat mich ungefähr einen Tag lang verrückt gemacht ...
quelle
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 bei Verwendung von Lambdas häufig der Fall ist), Sie jedoch ein Objekt zurückgeben, liegt offensichtlich ein Problem vor.
quelle
Versuchen Sie es einfach mit System.Linq. Ich denke, es wird Ihnen helfen, diese Probleme zu lösen.
quelle
Für .Net Core einfach vorstellen;
using System.Linq; using Microsoft.EntityFrameworkCore;
quelle