LINQ to Entities不能识别'System方法.DateTime ConvertTimeFromUt
本文关键字:System 方法 DateTime ConvertTimeFromUt to Entities 不能 识别 LINQ | 更新日期: 2023-09-27 18:06:39
我有一个从数据库中提取的错误集合。时间存储为UTC,但我想将其转换为CST:
var errors = _errorsRepository.Errors.
Select(e => new ErrorViewModel
{
ErrorId = e.ErrorId,
Application = e.Application,
Host = e.Host,
Type = e.Type,
Source = e.Source,
Message = e.Message,
User = e.User,
StatusCode = e.StatusCode,
TimeUtc = TimeZoneInfo.ConvertTimeFromUtc(
e.TimeUtc, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")),
Sequence = e.Sequence,
AllXml = e.AllXml
});
但是我得到这个错误:
LINQ to Entities不能识别方法System。DateTime ConvertTimeFromUtc(系统。DateTime, System.TimeZoneInfo)'方法,并且该方法不能转换为存储表达式
有谁知道我能做些什么来绕过这个吗?
LINQ to Entities将尝试将您的LINQ查询转换为SQL查询。因为你写的部分内容不能转换成SQL,所以你会得到这个错误。
您可以通过首先使用ToList()将查询转换为内存中的对象,然后使用LINQ to Objects来获得所需的结果来解决这个问题:
var errors = _errorsRepository.Errors.ToList().
Select(e => new ErrorViewModel
{
ErrorId = e.ErrorId,
Application = e.Application,
Host = e.Host,
Type = e.Type,
Source = e.Source,
Message = e.Message,
User = e.User,
StatusCode = e.StatusCode,
TimeUtc = TimeZoneInfo.ConvertTimeFromUtc(
e.TimeUtc, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")),
Sequence = e.Sequence,
AllXml = e.AllXml
});
注意,这将首先从_errorsRepository获取所有错误到内存中。在这种情况下,看起来这对你来说并不重要,因为你无论如何都会得到它们。