Asp.net 将日期时间更改为在LINQ到实体IQueryable匿名类型中使用UTC
我使用LINQ到实体查询并返回一个匿名类型。日期值以UTC格式存储在数据库中,因此在将日期值返回给客户端时,我需要将日期值的结果格式化为UTC。为此,我使用Asp.net 将日期时间更改为在LINQ到实体IQueryable匿名类型中使用UTC,asp.net,vb.net,entity-framework,linq-to-entities,Asp.net,Vb.net,Entity Framework,Linq To Entities,我使用LINQ到实体查询并返回一个匿名类型。日期值以UTC格式存储在数据库中,因此在将日期值返回给客户端时,我需要将日期值的结果格式化为UTC。为此,我使用Date.ToString(“u”)将结果格式化为UTC。唯一的问题是在LINQ查询中使用ToString时失败,因为在SQL中没有等效的命令来转换它。如何使用LINQ to Entity以UTC格式返回查询结果?以下是我的查询示例: Return _db.WorkOrders.Include("Client").Include("Wareh
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中没有等效的方法。当然ToString()
方法在LINQ to Entities中不受支持-没有将DateTime
转换为字符串的SQL等效方法。可用的SqlFunctions
中没有UTC转换,但不存在DateTime
到string
的转换方法
您可以尝试使用ToList
或AsEnumerable
首先在内存中具体化查询结果,使用LINQ to Objects执行DateTime
到UTC字符串的转换,然后使用AsQueryable
返回,结果是IQueryable
对象要使用,如下所示:
Return _db.WorkOrders.Include("Client").Include("Warehouse")
.OrderByDescending(Function(wo) wo.Date)
.Where(Function(w) (w.Status = WorkOrder.WorkOrderStatus.Submitted)
.ToList()
.Select(Function(wo) New With {
.Client = wo.Client.Name,
.Date = wo.Date.ToUniversalTime().ToString(),
.Warehouse = wo.Warehouse.Name,
.Status = wo.Status.ToString()
})
.AsQueryable() ' since ToDataSourceResult requires IQueryable, this should be added
.ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter)
您是否尝试过
wo.Date.ToUniversalTime().ToString()
?@danielshillock我无法在LINQ查询中使用这些函数,因为没有SQL等价物,因此.NET不知道如何处理它。请参见首先使用ToList()将列表具体化,然后投影到匿名对象中。使用ToList()后,您将拥有所有对象,并且您的ToString()将受到支持,因为您使用的是LINQ to object而不是SQL。