Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ to实体无法识别方法';System.DateTime转换器TimeFromUTC(System.DateTime,System.TimeZoneInfo)和#x27;方法_C#_Linq_Datetime_Exception Handling_Linq To Entities - Fatal编程技术网

C# LINQ to实体无法识别方法';System.DateTime转换器TimeFromUTC(System.DateTime,System.TimeZoneInfo)和#x27;方法

C# LINQ to实体无法识别方法';System.DateTime转换器TimeFromUTC(System.DateTime,System.TimeZoneInfo)和#x27;方法,c#,linq,datetime,exception-handling,linq-to-entities,C#,Linq,Datetime,Exception Handling,Linq To Entities,我有一个从数据库中提取的错误集合。时间存储为UTC,但我想将其转换为CST: var errors = _errorsRepository.Errors. Select(e => new ErrorViewModel { ErrorId = e.ErrorId, Application = e.Application, Host = e.Host, Type = e.Type, Source =

我有一个从数据库中提取的错误集合。时间存储为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实体无法识别方法“System.DateTime ConvertTimeFromUtc(System.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
 });
请注意,这将首先将_errorsrespository中的所有错误存储到内存中。在这种情况下,看起来这对你来说并不重要,因为你无论如何都会得到它们