Есть класс. У класса две числовые переменные int условно class A { int x int y }
есть IEnumerable<A>
Задача несколько раз соединить A в цепочку так чтобы
A1.y = A2.x -> A2.y = A3.x и т.д.
В прочем это не есть проблема, просто пишем IEnumerable.Join(IEnumerable, a1 => a1.y, a2 => a2.x)
это работает быстро.
А теперь вишенка на торте. Надо сделать так чтобы в схеме
A1.y = A2.x -> A2.y = A3.x
появилось условие A1.x = A3.y То есть помимо боковых соединений должно появиться крайнее соединение (на первой картинке).
Для того чтобы это сделать единственное что приходит на ум это к получившейся IEnumerable<IEnumerable<A>> применять Where(x => x.First().x == x.Last().y)
Но First и Last работают чрезмерно дохуя по времени. Если вместо IEnumerable запихивать в List например или Array то с моими объемами данных процесс резко начинает жрать до 6 гигабайт ОЗУ и работать дико медленно.