This is happening because LINQ to Entities is trying to convert the expression tree into a SQL query, and while .ToString()
can be translated into SQL, .ToString(string)
can not. (SQL doesn't have the same concepts of string formatting.)
To resolve this, don't perform the formatting in the query, perform it in the display logic. Keep the query as simple as possible:
select new PerformanceReviewsDTO
{
ReviewDate=pr.ReviewDate,
EmployeeName=pr.ReviewedByEmployee.Name,
JobTitle=pr.ReviewedByEmployee.JobTitle,
ReviewerComments=pr.CommentsByReviewer,
EmployeeComments=pr.CommentsByEmployee
}
In this case PerformanceReviewsDTO.ReviewDate
is still a DateTime
value. It's not formatting the data, just carrying it. (Like a DTO should.)
Then when you display the value, perform the formatting. For example, is this being used in an MVC view?:
@Model.ReviewDate.ToString("MMM dd,yyyy")
You might even just add a simple property to PerformanceReviewsDTO
for the formatted display:
public string FormattedReviewDate
{
get { return ReviewDate.ToString("MMM dd,yyyy"); }
}
Then whatever is binding to properties on the DTO can just bind to that (assuming it's a one-way binding in this case).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…