【发布时间】:2018-02-16 07:46:01
【问题描述】:
我正在使用 LINQ to Entity 查询并返回匿名类型。日期值以 UTC 格式存储在数据库中,因此在将日期值的结果返回给客户端时,我需要将其格式化为 UTC。为此,我使用Date.ToString("u")将结果格式化为UTC。唯一的问题是,当在 LINQ 查询中使用 ToString 时,它会失败,因为没有等效的命令可以在 SQL 中转换它。如何使用 LINQ to Entity 以 UTC 格式返回查询结果?这是我的查询示例:
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") 上的查询失败,因为 SQL 中没有等效方法。
【问题讨论】:
-
你试过
wo.Date.ToUniversalTime().ToString()吗? -
@DanielShillcock 我不能在 LINQ 查询中使用这些函数,因为没有等效的 SQL,所以 .NET 不知道如何处理它。见link
-
首先使用 ToList() 将您的列表具体化,然后投影到您的匿名对象中。使用 ToList() 后,您将拥有所有对象,并且您的 ToString() 将得到支持,因为您使用的是 LINQ to Object 而不是 SQL。
标签: asp.net vb.net entity-framework linq-to-entities