【问题标题】:LINQ to Entities not supported不支持 LINQ to Entity
【发布时间】:2013-10-29 18:29:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 太好了,谢谢!此处描述了如何获取不同的日期部分:msdn.microsoft.com/de-de/library/ms174395.aspx。还有办法将月份作为数字吗?
    • @user2558051 抱歉,忘记了一个月。更新示例,将其作为数字获取(您需要为此使用 StringConvertDatePart
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2012-05-12
    • 2012-07-13
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多