Pro*_*nja 7 c# linq linq-to-entities entity-framework
我必须以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
};
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误消息
ExceptionMessage:LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,并且此方法无法转换为商店表达式.ExceptionType:System.NotSupportedException
当我申请时ToString,pr.ReviewDate我得到错误.
请指导我正确的解决方案如何实现这一目标.我知道在正常的C#编码中有几个选项可用,但在Linq我们怎么做呢.
Dav*_*vid 13
发生这种情况是因为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
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下PerformanceReviewsDTO.ReviewDate仍然是一个DateTime价值.它不是格式化数据,只是携带它.(就像DTO一样.)
然后,当您显示该值时,执行格式化.例如,这是用于MVC视图吗?:
@Model.ReviewDate.ToString("MMM dd,yyyy")
Run Code Online (Sandbox Code Playgroud)
您甚至可以PerformanceReviewsDTO为格式化显示添加一个简单属性:
public string FormattedReviewDate
{
get { return ReviewDate.ToString("MMM dd,yyyy"); }
}
Run Code Online (Sandbox Code Playgroud)
然后,绑定到DTO上的属性的任何东西都可以绑定到它(假设在这种情况下它是单向绑定).
| 归档时间: |
|
| 查看次数: |
17175 次 |
| 最近记录: |