У меня есть таблица базы данных с миллионами заархивированных строк значений, которые состоят из значения (одиночного), двух целочисленных полей id и поля datetime (и некоторых других полей, которые не имеют отношения к кешу, который я хочу построить). Структура таблицы исправлена, я не могу ее изменить. Теперь я хочу прочитать все строки в массив объектов простого класса, который я хочу сохранить в памяти для кеширования.Вставить DateTime в Unix Timestamp в инструкции Select?
Чтобы снизить потребление памяти, я хочу использовать временную метку unix вместо объекта datetime. Это также полезно, потому что интерфейсные диаграммы и т. Д., Которые будут последовательно работать с этим кешем, также изначально работают с отметками времени Unix.
Для создания кеша я хочу выбрать непосредственно в ArchiveElement. Это хорошо работает для большинства полей, но я не знаю, как создать Отметка времени Unix на лету ВНУТРИ оператора выбора:
ArchiveCache = db.ArchiveValues.Select(x => new ArchiveElement() {
DataPointId = (UInt16)x.DataPointId,
StationId = (UInt16)x.StationId,
Value = (Single)x.Value,
DateValue = x.DateValue // <-- Here I want to cast into Unix Timestamp
});
Это класс ArchiveElement:
public class ArchiveElement
{
public UInt32 DateValue;
public UInt16 DataPointId;
public UInt16 StationId;
public Single Value;
}
У меня есть функция в моем приложении, которая может конвертировать DateTime
в Unix TimeStamp, но это не работает в рамках инструкции select
. Поэтому мне нужно найти другой путь.
Одним из способов были бы вставить .ToList()
перед .Select(..)
заявлением, так что у меня есть доступ к моей собственной функции, но это было бы некрасиво обходным путь, как он получает много полей из ненужной БД.
Есть ли способ каким-то образом преобразовать дату-время "на место"?
Получает ли он много ненужных полей? Похоже, вы пытаетесь вытащить всю таблицу в любом случае. – Jonesopolis
В таблице DB есть еще несколько полей, которые я здесь не упоминал, просто чтобы это было просто. – Robert
Что именно вы подразумеваете под отметкой времени Unix? Вы имеете в виду эпоху, например 1423748783? – DavidG