Джон Скис отвечает на этот вопрос, Выберите все уникальные комбинации одного списка, без повторов, используя LINQ, работает великолепно.
Однако может ли кто-то сломать компонент по компоненту внутреннюю работу, как работает первый ответ:
List<int> slotIds = new List<int> {1, 2, 3};
var query = slotIds.SelectMany((value, index) => slotIds.Skip(index + 1),
(first, second) => new { first, second });