加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在Linq查询中将DateTime转换为String?

发布时间:2020-12-15 04:32:11 所属栏目:百科 来源:网络整理
导读:我必须以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.ReviewedByEmp
我必须以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 does not recognize the method ‘System.String ToString(System.String)’ method,and this method cannot be translated into a store expression.
ExceptionType:
System.NotSupportedException

当我在pr.ReviewDate上应用ToString时,我得到错误.

请通过适当的解决方案指导我如何实现这一目标.我知道在正常的C#编码中有几种选择,但在Linq我们怎么做呢.

解决方法

发生这种情况是因为LINQ to Entities正在尝试将表达式树转换为SQL查询,而.ToString()可以转换为SQL,而.ToString(string)则不能. (SQL没有相同的字符串格式概念.)

要解决此问题,请不要在查询中执行格式化,在显示逻辑中执行它.保持查询尽可能简单:

select new PerformanceReviewsDTO
{
    ReviewDate=pr.ReviewDate,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上的属性的任何东西都可以绑定到它(假设在这种情况下它是单向绑定).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读