2017-09-07 5 views
1

LINQ to Entity 쿼리를 사용하고 익명 형식을 반환하고 있습니다. 날짜 값은 데이터베이스에 UTC 형식으로 저장되므로 클라이언트에 반환 할 때 날짜 값의 결과를 UTC 형식으로 지정해야합니다. 이렇게하려면 Date.ToString("u")을 사용하여 결과의 ​​형식을 UTC로 지정하십시오. 유일한 문제는 LINQ 쿼리에서 ToString을 사용할 때 SQL에서 변환 할 해당 명령이 없으므로 실패합니다. LINQ to Entity를 사용하여 쿼리의 결과를 UTC로 어떻게 반환합니까? SQL에 상응하는 방법이 없기 때문에LINQ에서 UTC를 사용하도록 DateTime 변경 IQueryable 익명 형식

Return _db.WorkOrders.Include("Client").Include("Warehouse") 
    .OrderByDescending(Function(wo) wo.Date) 
    .Where(Function(w) 
    (w.Status = WorkOrder.WorkOrderStatus.Submitted) 
    .Select(Function(wo) New With {.Client = wo.Client.Name, 
    .Date = wo.Date.ToString("u"), .Warehouse = wo.Warehouse.Name, .Status = wo.Status.ToString}) 
    .ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter) 

쿼리가 wo.Date.ToString("u")에 실패 여기 내 쿼리의 예입니다.

+0

'wo.Date.ToUniversalTime(). ToString()'을 (를) 사용해 보셨습니까? –

+0

@DanielShillcock SQL에 상응하는 것이 없기 때문에 LINQ 쿼리에서 이러한 함수를 사용할 수 없으므로 .NET은 그 함수를 어떻게 처리해야하는지 알지 못합니다. [link] (https://stackoverflow.com/questions/6887776/linq-convert-datetime-to-string) – Nse

+1

먼저 ToList()를 사용하여 목록을 만든 다음 익명 개체에 투영하십시오. ToList()를 사용하면 모든 개체가 생성되고 SQL 대신 Object에 LINQ를 사용하기 때문에 ToString()이 지원됩니다. – Fran

답변

3

확실히 ToString() 메서드는 LINQ to Entities에서 지원되지 않습니다. DateTime을 문자열로 변환 할 수있는 SQL이 없습니다. 사용할 수있는 SqlFunctionsGetUtcDate UTC 변환이 있지만 DateTime ~ string 변환 방법이 없습니다.

그런 다음, 객체에 LINQ와 UTC 문자열 변환 DateTime을 수행 먼저 메모리에 쿼리 결과를 구체화 ToList 또는 AsEnumerable를 사용하려고 아래로 ToDataSourceResult에 사용할 IQueryable 개체를 결과 AsQueryable를 사용하여 다시 되돌릴 수 있습니다 :