UTC to local time using Linq to Entities

后端 未结 2 1697
無奈伤痛
無奈伤痛 2021-01-27 03:35

I need to translate a field from UTC to local time in a LINQ to Entities query. But it does not recognize the method \'System.DateTime ToLocalTime\' that I was intended to use.

相关标签:
2条回答
  • 2021-01-27 04:14

    What time zone would you expect that to use? The only one the database really knows about by default would probably be its own.

    Note that DateTime.Day only represents the day of the month - do you want June 10th and July 10th to count as the same day?

    If you can work out what time zone you're really interested in, that may suggest a potential solution - although I wouldn't like to guarantee it. It's possible that this is one of those cases where actually it makes sense to store the local date and time, as well as the time zone, rather than the UTC date/time. (This is appropriate if the local date/time is actually more important than the instant represented, compared to other values.)

    0 讨论(0)
  • 2021-01-27 04:16

    To be able to use functions that don't translate to SQL, you need to materialize the table.

    var materializedRequests = Requests.Where(x => !x.Resolved).ToList(); //Materialize list with a ToList call
    
    materializedRequests
        .Where(x =>
            !materializedRequests.Any(y => 
                y.IncommingDateTime.ToLocalTime().Day == x.IncommingDateTime.ToLocalTime().Day
            )
        )
    

    Then you can use pretty much any functions you want. However, materializing the list is a VERY expensive call. Try to filter the list as much as you can before you materialize it.

    0 讨论(0)
提交回复
热议问题