Wie kann ich umwandeln, DateTime in String in Linq-Abfrage?
Habe ich, um das Datum anzuzeigen, die in MMM dd,YYYY
- format.
var performancereviews = from pr in db.PerformanceReviews
.Include(a => a.ReviewedByEmployee)
select new PerformanceReviewsDTO
{
ReviewDate=pr.ReviewDate.ToString("MMM dd,yyyy"),
EmployeeName=pr.ReviewedByEmployee.Name,
JobTitle=pr.ReviewedByEmployee.JobTitle,
ReviewerComments=pr.CommentsByReviewer,
EmployeeComments=pr.CommentsByEmployee
};
Hier ist die Fehlermeldung, die ich erhalte
ExceptionMessage: LINQ to Entities nicht erkennt die Methode 'System.String ToString(System.String)' - Methode, und diese Methode kann nicht übersetzt werden, in einen laden zu Ausdruck.
ExceptionType:
System.NotSupportedException
Wenn ich ToString
auf pr.ReviewDate
bekomme ich Fehler.
Freundlich guide, mich mit der richtigen Lösung, wie kann ich dies erreichen. Ich weiß, im normalen C# - coding gibt es mehrere Optionen zur Verfügung, aber in der Linq-wie können wir es tun.
- In der Regel zeigen die Formatierung erfolgt in der Anzeige-Logik, nicht beim Abfragen von Daten. Was ist der Typ von
PerformanceReviewsDTO.ReviewDate
? Welchen Fehler dieser code geben? - Ich bin mir bewusst, der Typ bin, wenn die Speicherung von string-Typ Wert dann auf jeden Fall sollte es string und es ist string hier ist Fehler ExceptionMessage: LINQ to Entities nicht erkennt die Methode 'System.String ToString(System.String)' - Methode, und diese Methode kann nicht übersetzt werden, in einen laden zu Ausdruck. ExceptionType: System.NotSupportedException aus
- Warum jemand downvoted,bitte vergessen Sie nicht, Kommentare, während downvoting.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist passiert, weil LINQ to Entities versucht zu konvertieren, Ausdruck Baum in eine SQL-Abfrage, und während
.ToString()
kann übersetzt werden in die SQL -.ToString(string)
kann nicht. (SQL nicht die gleichen Vorstellungen von string-Formatierung.)Um dies zu beheben, führen Sie die Formatierung in der Abfrage, führen Sie es in die Anzeige-Logik. Halten Sie die Abfrage so einfach wie möglich:
In diesem Fall
PerformanceReviewsDTO.ReviewDate
ist immer noch einDateTime
Wert. Es ist nicht die Formatierung der Daten, einfach zu tragen. (Wie ein DTO sollte.)Dann, wenn Sie display der Wert, führen Sie die Formatierung. Zum Beispiel ist das in MVC-Ansicht?:
Könnten Sie sogar fügen Sie einfach eine einfache Eigenschaft
PerformanceReviewsDTO
für die formatierte Anzeige:Dann, was ist verbindlich, um die Eigenschaften der auf dem DTO kann nur binden, dass (vorausgesetzt, es ist ein one-way-Bindung in diesem Fall).
FormattedReviewDate
Eigenschaft sowie dieReviewDate
Eigenschaft. (Wenn die Namensgebung ist wichtig, können Sie Sie ändern, um so etwas wieReviewDate
undPersistedReviewDate
bzw. so aufwändig code nicht zu ändern.) Wie für die anderen gepostet beantworten, achten Sie auf die Kommentare. Es könnte "Arbeit" könnte aber auch drastische Nebenwirkungen.Den Weg, den ich in der Regel lösen dieses problem, indem Sie zuerst immer nur die Daten auswählen und dann im Speicher'.
Indem
ToArray
(oder Liste oder was auch immer) werde es so beenden Sie die sql-Abfrage-Teil und dann den rest aus der Auflistung in Speicher - die sollten in Ordnung sein.Select
durchgeführt wird, auf die Datenbank, insbesondere die Beschränkungen, für welche Spalten zurückgegeben werden.