1

Asp.net 웹 API에서 다음 모델을 사용하고 있습니다.LINQ to Entities 지원되지 않음

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을 throw합니다. 어떻게 날짜를 포맷 할 수 있습니까?

답변

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) 
+0

좋아요, 감사합니다! 다른 날짜 부분을 얻는 방법은 http://msdn.microsoft.com/de-de/library/ms174395.aspx에서 설명합니다. 그 달을 숫자로 얻는 방법이 아직 남아 있습니까? – Explicat

+0

@ user2558051 죄송합니다. 한 달을 잊어 버렸습니다. 업데이트 된 샘플을 숫자로 가져옴 (이 경우'StringConvert'와'DatePart'를 사용해야합니다) –