Как я могу получить данные из временного ряда с помощью LINQ to SQL? - PullRequest
2 голосов
/ 09 апреля 2010

У меня есть таблица базы данных, заполненная точками времени и экспериментальными значениями в эти моменты времени. Мне нужно получить значения для эксперимента и создать миниатюрное изображение, показывающее график XY его данных. Поскольку фактический набор данных для каждого эксперимента потенциально составляет 100 000 точек данных, а мое изображение имеет ширину всего 100 пикселей, я хочу взять данные, взяв каждый n-й момент времени для моего изображения и игнорируя остальные.

Мой текущий запрос (который извлекает все данные без выборки) выглядит примерно так:

var points = from p in db.DataPoints
             where p.ExperimentId == myExperimentId
             orderby p.Time
             select new {
                            X = p.Time,
                            Y = p.Value
                        }

Итак, как мне лучше взять каждую n-ю точку из моего набора результатов в запросе LINQ to SQL?

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

Это будет делать каждый n-й элемент:

int nth = 100;
var points = db.DataPoints
           .Where(p => p.ExperimentId == myExperimentId)
           .OrderBy(p => p.Time)
           .Where( (p, index) => index % nth == 0 )
           .Select( p => new { X = p.Time, Y = p.Value } );

Работает с использованием перегрузки Queryable.Where , которая обеспечивает индекс в последовательности, поэтому вы можете фильтровать на основе индекса.

1 голос
/ 09 апреля 2010
.Skip(n).Take(1)

Вернет одну точку выборки. Повторно звоните, чтобы получить больше очков.

http://msdn.microsoft.com/en-us/library/bb386988.aspx

Если производительность становится проблемой, и у вас есть первичный идентификационный ключ типа int, содержащий последовательные значения, вы можете попробовать вернуть все записи, которые будут равномерно делить первичный ключ на ваше n.

.Where(x => x.PK % n == 0)
0 голосов
/ 09 апреля 2010

Ты должен

.Skip(n).Take(100)

Он пропускает количество пропущенных записей и занимает 100 записей.

НТН

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