UTC по местному времени с использованием Linq to Entities - PullRequest
1 голос
/ 04 октября 2010

Мне нужно перевести поле из UTC в местное время в запросе LINQ to Entities. Но он не распознает метод «System.DateTime ToLocalTime», который я намеревался использовать.

Мой запрос был таким:

Выбор запросов, для которых не существует других запросов в тот же день в локальном, еще не разрешенных . Учитывая, что IncommingDateTime хранится в UTC, это запрос.

from r in Requests
where Request.Count(x => x.IncommingDateTime.ToLocalTime().Date == r.IncommingDateTime.ToLocalTime().Date 
&& x.Resolved == false ) = 0
select r

Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Чтобы иметь возможность использовать функции, которые не переводятся в SQL, вам нужно материализовать таблицу.

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
        )
    )

Затем вы можете использовать практически любые функции, которые вам нужны.Однако материализация списка - ОЧЕНЬ дорогой вызов.Попробуйте отфильтровать список как можно больше, прежде чем материализовать его.

1 голос
/ 04 октября 2010

Какой часовой пояс вы ожидаете использовать?Единственная база данных, о которой действительно знает база данных по умолчанию, вероятно, будет ее собственной.

Обратите внимание, что DateTime.Day представляет только день месяца - хотите, чтобы 10 июня и 10 июля считались одним днем?

Если вы можете определить, какой часовой пояс вас действительно интересует, это может предложить потенциальное решение, хотя я бы не хотел его гарантировать.Возможно, это один из тех случаев, когда на самом деле имеет смысл хранить локальную дату и время, а также часовой пояс, а не дату / время UTC.(Это подходит, если локальная дата / время на самом деле важнее, чем представленный момент, по сравнению с другими значениями.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...