LINQ to Entities不受支持

时间:2013-10-21 10:06:06

标签: asp.net asp.net-mvc linq asp.net-web-api linq-to-entities

在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。我怎样才能格式化日期?

1 个答案:

答案 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)