在Asp.net Web API中我有以下模型。
public class User
{
[Required, Key]
public long Id { get; set; }
public string Name { get; set; }
public Company Employer { get; set; }
[Required]
public DateTime DateAdded { get; set; }
}
这是其中一个控制器的摘录。
// GET api/Company/5
public Object GetCompany(int id)
{
var query = from user in db.Users
join company in db.Companies on user.Employer.Id equals company.Id
where company.Id == id
orderby user.Name
select new { Id = user.Id, Name = user.Name, EmailAddress = user.EmailAddress, Version = user.DateAdded.ToString("dd.MM.yyyy"), Employer = company.Name };
return query.AsEnumerable<Object>();
}
我想要的是格式化DateAdded属性。但是,当我尝试在用户的某个属性上调用方法或调用用户的方法时,EF会抛出NotSupportedException。我怎样才能格式化日期?
答案 0 :(得分:1)
EF无法将user.DateAdded.ToString("dd.MM.yyyy")
方法转换为SQL代码。您应该将日期格式设置移动到客户端(使用AsEnumerable()
或ToList()
调用)或使用SqlFunctions在服务器端构建日期字符串:
Version =
SqlFunctions.DateName("dd", user.DateAdded) + "." +
SqlFunctions.StringConvert(
(decimal?)SqlFunctions.DatePart("MM", user.DateAdded)).Trim() + "." +
SqlFunctions.DateName("yyyy", user.DateAdded)