[英]How can I convert DateTime to String in Linq Query?
我必须以MMM dd,YYYY
格式显示日期。
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
};
这是我得到的错误消息
ExceptionMessage:LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,并且此方法无法转换为商店表达式。 ExceptionType:System.NotSupportedException
当我在pr.ReviewDate
上应用ToString
,我得到错误。
请指导我正确的解决方案如何实现这一目标。 我知道在正常的C#编码中有几个选项可用,但在Linq我们怎么做呢。
发生这种情况是因为LINQ to Entities正在尝试将表达式树转换为SQL查询,而.ToString()
可以转换为SQL,而.ToString(string)
则不能 。 (SQL没有相同的字符串格式概念。)
要解决此问题,请不要在查询中执行格式化,在显示逻辑中执行它。 保持查询尽可能简单:
select new PerformanceReviewsDTO
{
ReviewDate=pr.ReviewDate,
EmployeeName=pr.ReviewedByEmployee.Name,
JobTitle=pr.ReviewedByEmployee.JobTitle,
ReviewerComments=pr.CommentsByReviewer,
EmployeeComments=pr.CommentsByEmployee
}
在这种情况下, PerformanceReviewsDTO.ReviewDate
仍然是DateTime
值。 它不是格式化数据,只是携带它。 (就像DTO一样。)
然后,当您显示该值时,执行格式化。 例如,这是用于MVC视图吗?:
@Model.ReviewDate.ToString("MMM dd,yyyy")
您甚至可以为PerformanceReviewsDTO
添加一个简单的属性,用于格式化显示:
public string FormattedReviewDate
{
get { return ReviewDate.ToString("MMM dd,yyyy"); }
}
然后,绑定到DTO上的属性的任何东西都可以绑定到它(假设在这种情况下它是单向绑定)。
我通常解决这个问题的方法是首先获取数据,然后在内存中选择它。
var performancereviews = from pr in db.PerformanceReviews
.Include(a => a.ReviewedByEmployee)
.ToArray()
.Select( ....);
通过放置ToArray
(或List或其他),它将完成sql查询部分,然后从内存中的集合中完成其余部分 - 这应该没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.