Unable to cast den Typ 'System.Int64' to type 'System.Objekt'. LINQ to Entities unterstützt nur casting Entity Data Model primitive Typen
Habe ich eine EF 4 & C#, um einige Daten. Ich bin mit Linq. Seinen Sie wie folgt vor:
public List<object> GenerateCallTrackingReport(int startRowIndex, int maximumRows, int createdByID)
{
var query = from c in this.ObjectContext.CallLogs
select new
{
CallLogID = c.CallLogID,
DomainName = c.CallDomain.FullName,
CreatedByID = c.CreatedByID,
CreatedBy = c.CreatedByUser.FirstName + " " + c.CreatedByUser.LastAccessIPN,
CalledOn = c.CallDate,
IssueResolutionTime = c.IssueResolutionTime,
CallType = c.CallType.FullName,
CallDescription = c.CallDescription,
CustomerName = (c.CustomerID > 0 ? c.Customer.FirstName + " " + c.Customer.LastAccessIPN : c.TempCaller.FirstName + " " + c.TempCaller.LastName),
CustomerEmail = (c.CustomerID > 0 ? c.Customer.Email : string.Empty),
CustomerResponse = c.Response.FullName,
IsPending = c.IsPending,
NeedFurtherContact = c.NeedFurtherContact
};
if (createdByID > 0)
query = query.Where(c => c.CreatedByID == createdByID);
if (maximumRows > 0)
query = query.Skip(startRowIndex).Take(maximumRows);
return query.ToList<object>();
}
Diese verursacht den folgenden Fehler:
Unable to cast the type 'System.Int64' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types.
Jede Idee y bin ich immer diese Fehlermeldung??
Dank
- Welche Linie ist die Ausnahme?
- Weil, wie Linq-To-EF arbeiten, sind die Ausnahme wird wahrscheinlich auftreten, in der letzten Zeile, egal wo die Quelle des Problems ist, und größtenteils nutzlos.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gelöst
Hatte ich zwei Probleme, jeder von Ihnen würde diesen Fehler verursachen:
1. Ich war der Zugriff auf NULLABLE Entität-Eigenschaften, ohne zu überprüfen, ob Sie Wert haben oder nicht. Sagen CustomerID ist NULLABLE, also meine Anfrage wurde so etwas wie dieses!
So überprüfen Sie einfach alle null-Wert durch seine HasValue Eigentum vor dem Zugriff auf Sie (2. Zeile in select-Teil).
2. Ich War auch versucht, zu konvertieren integer zu string, die innerhalb der select-Anweisung. Also beschloss ich einfach, dass die Konvertierung in HTML anstatt direkt tut es hier. Dies löste meine Probleme.
Hoffe, das jemand hilft!
?
Arbeit wird für 1 und 'SqlFunctions.StringConvert " helfen, zu konvertieren zu einem string. Vielen Dank 🙂Sobald Sie die
ToList
Sie anrufen möchten, werden Sie durchführen, C#, nicht in der Datenbank. VerwendenAsEnumerable
als eine Art zu sagen, "Stop doing dieses Zeug in der Datenbank, tun Sie es in C#."Hinzufügen, dass direkt vor der
ToList
am Ende so, dass alles, was geschieht auf der Datenbank.Erste, würde ich nicht abrufen, wird die gesamte Tabelle, dann tun Sie Abfragen auf den vollen Datenbestand in C#, wie Sie hier tun. Verkettung linq to entities-Methoden wie diese machen es schneller - Massiv, so dass, wenn Sie große datasets:
Zweite, ich weiß nicht das genaue problem, aber das erstellen einer Liste von dynamischen Objekten wie dies ist nicht wirklich eine gute Idee. Erstellen Sie eine
CallLogModel
Klasse mit den Eigenschaften, die Sie setzen in das Objekt wie folgt:ToList
nichts.object
Stimme ich zu, dass wäre wohl am besten, aber das ist ein Kommentar, keine Antwort auf das problem.