1

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; }
    }

そして、これはコントローラーの 1 つからの抜粋です。

// 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 プロパティをフォーマットすることです。ただし、ユーザーのプロパティの 1 つでメソッドを呼び出そうとしたり、ユーザーのメソッドを呼び出そうとしたりすると、EF は NotSupportedException をスローします。どうすれば日付をフォーマットできますか?

4

1 に答える 1

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)
于 2013-10-21T10:11:41.833 に答える