LINQにはSelectMany演算子がありますが、これを使うと簡単に重複ありの組合せを求めることができます。
たとえば、1,2,3,4 の中から2つを抜き出す組合せは
とすれば、求めることができます。こちらに載せた「小町算」では、これを応用して、
といった計算式を求めています。以下、その抜粋でです。
コードの全体は、こちらに掲載しています。