s))
.GroupBy(t => t.Item2.Dimensions, new TimeSeriesDimensionsComparer(false))
.Select(gr => Tuple.Create(SelectIndexes(gr), gr.Select(t => t.Item2).Distinct(new TimeSeriesKeyComparer())))
.Select(t => t.Item1.Select(e => Tuple.Create(e, t.Item2)))
.SelectMany(e => e.Select(r => r))
.OrderBy(e => e.Item1)
.Select(e => e.Item2);
Жепа
и не говори (
но может есть идеи как оптимизировать это ?
Как-то мало что понятно. Что за коллекция replacedTimeSeries? Что вообще надо сделать и что получить?
replacedTimeSeries - это IEnumerable<TimeSeries> тут много выборок и групировок чтобы отделить лишнее, отсортировать, дубли убрать и прочее
Блин, бы эту херню сначала распилил в отдельные переменные, чтобы формализовать для чего я каждый linq сделал. И переменные именно так и назвать. Потому что то, что я вижу сейчас - для меня непознаваемо.
не поверишь, для меня тоже ))
Тогда распили и попробуй понять, зачем чувак каждый шаг делал когда-то 🌚
да так и придётся
загадок стало только больше, если честно ))
Ты разобрался зачем там кортежи?)
только одну причину вижу использования кортежей. для сортировки в самом конце по индексу списка
Я так понял, это какая-то свёртка, которая в итоге даст вместо самого объекта массив объектов с тем же параметром dimensions?
Ну и что бы не сделать для каждого условия группы Dimensions, new TimeSeriesDimensionsComparer(false) запись в словаре, где value - IEnumerable, потом раз пройти по исходному массиву и заполнить эти группы в словаре, потом пройтись ещё раз и собрать в нужном порядке?
Еще лучше сделать это прямо в БД, если ms sql. ROW_NUMBER и PARTITION как раз для этого.
а не олап ли это....
Не до конца понятны условия группировки особенно вторая часть запроса, но в целом операция называется партицирование или вычисление кубов данных. В качестве оптимизации можешь её сделать в БД, если она позволяет.
нельзя
Это прогноз (
Обсуждают сегодня