2016-02-12 4 views
0

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

Следующий код показывает, как я выполняю этот запрос в настоящий момент, но с оператором: v.CreateTime > v.CreateTime < endDate). Я только объявляю, между какими датами я хотел бы получить данные.

Я хочу данные со временем :15, :30, :45, :00. Также данные не введены точно в это время. Например, 12:15:23 возможно, но 12:14.43 также возможен.

vafDataList = service.LoadVesselRecord<VafData>(v => 
     v.TypeNo == RecordObjectTypes.VafData && 
     v.Vessel_No == vesselNo && 
     v.CreateTime > startDate && 
     v.CreateTime < endDate) 
    .OrderBy(t => t.CreateTime) 
    .ToList(); 

Как я могу выбрать только записи за четверть часа, а не все записи?

+1

у вас есть фильтр по времени создания. Что с этим не так? –

+0

Это _very_ тривиально, и код, который у вас есть, будет работать, если вы знаете _which_ 15 минут, которые вы хотите. Что вы пробовали? Какой у Вас вопрос? Что такое _ «загружать только одну запись каждые 15 минут?» Означает? Вы запрашиваете таймер или для 'DateTime.Now.AddMinutes (-15)'? – CodeCaster

+0

Вы хотите, чтобы [truncate the seconds] (http://stackoverflow.com/questions/1004698/how-to-truncate-milliseconds-off-of-a-net-datetime) из результата? – CodeCaster

ответ

2

Вы можете просто выбрать записи для тех минут:

.Where(t => new int[] { 0, 15, 30, 45 }.Contains(t.CreateTime.Minute)) 

Однако, предполагая, что ваш LoadVesselRecord() называет Where(), который запускается на выполнение на DbSet, Entity Framework не может перевести это на запрос, так что вы» придется использовать SqlFunctions расширения, чтобы позволить Entity Framework перевести его на DATEPART SQL заявление в:

.Where(t => new int[] { 0, 15, 30, 45 } 
      .Contains(SqlFunctions.DatePart("minute", t.CreateTime))) 
+0

Попытка разобраться! Получение небольшой ошибки в: 'new int [] {0, 15, 30, 45}'. Невозможно преобразовать в IENumerable. Поэтому, я думаю, я просто добавляю '.ToList()' после этого, правильно? – Peurr

+0

Ничего, '.ToList()' не заставляет его работать. – Peurr

+0

Вы показываете неполное сообщение. Я подозреваю, что вам нужно будет указать DatePart в '(int)'. – CodeCaster

Смежные вопросы