Как сгруппировать по временному диапазону (время закрытия сгруппировано вместе)C#

Место общения программистов C#
Ответить
Anonymous
 Как сгруппировать по временному диапазону (время закрытия сгруппировано вместе)

Сообщение Anonymous »

Предположим, у нас есть следующие записи:

Код: Выделить всё

NID    CId    PushedAt
120    796    2015-09-04 18:00:53.6012627 +00:00
120    967    2015-09-04 18:00:51.9891748 +00:00
119    669    2015-09-04 17:45:56.8179094 +00:00
119    955    2015-09-04 17:45:55.2078154 +00:00
119    100    2015-09-04 17:45:53.5867187 +00:00
116    384    2015-09-04 17:01:01.5375630 +00:00
116    155    2015-09-04 17:00:59.9284665 +00:00
116    517    2015-09-04 17:00:58.3193725 +00:00
113    109    2015-09-04 16:00:53.5269438 +00:00
113    111    2015-09-04 16:00:51.9168442 +00:00
107    603    2015-09-04 13:45:59.9994496 +00:00
Я хочу сгруппировать их по временному диапазону (а не по определенному времени). Если я сгруппирую их по времени:

Код: Выделить всё

var grouped = list.GroupBy(t => new {
t.PushedAt.Year,
t.PushedAt.Month,
t.PushedAt.Day,
t.PushedAt.Hour,
t.PushedAt.Minute
});
тогда я буду пропускать группы, у которых разные минуты, но на самом деле они находятся в одной группе. Например, эти строки:

Код: Выделить всё

116    384    2015-09-04 17:01:01.5375630 +00:00
116    155    2015-09-04 17:00:59.9284665 +00:00
116    517    2015-09-04 17:00:58.3193725 +00:00
перейдет в эти группы:

Код: Выделить всё

// group 1:
116    384    2015-09-04 17:01:01.5375630 +00:00
// group 2:
116    155    2015-09-04 17:00:59.9284665 +00:00
116    517    2015-09-04 17:00:58.3193725 +00:00
Но я ищу вот эту группу:

Код: Выделить всё

// group 1:
116    384    2015-09-04 17:01:01.5375630 +00:00
116    155    2015-09-04 17:00:59.9284665 +00:00
116    517    2015-09-04 17:00:58.3193725 +00:00
Означает, что эти 3 строки должны быть сгруппированы вместе. Допустим, все строки, находящиеся в диапазоне 5 минут, должны быть сгруппированы вместе. Полный вывод будет примерно таким:

Код: Выделить всё

// group 1:
120    796    2015-09-04 18:00:53.6012627 +00:00
120    967    2015-09-04 18:00:51.9891748 +00:00
// group 2:
119    669    2015-09-04 17:45:56.8179094 +00:00
119    955    2015-09-04 17:45:55.2078154 +00:00
119    100    2015-09-04 17:45:53.5867187 +00:00
// group 3:
116    384    2015-09-04 17:01:01.5375630 +00:00
116    155    2015-09-04 17:00:59.9284665 +00:00
116    517    2015-09-04 17:00:58.3193725 +00:00
// group 4:
113    109    2015-09-04 16:00:53.5269438 +00:00
113    111    2015-09-04 16:00:51.9168442 +00:00
// group 5:
107    603    2015-09-04 13:45:59.9994496 +00:00
У вас есть идеи?
Примечание: Поле NID НЕ предназначено для группировки.
ОБНОВЛЕНИЕ:
Я знаю, что могу решить проблему, перебирая элементы (как сказал juharr в комментарии). Но я ищу решение LINQ, если оно есть. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/324 ... d-together
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»