Combinatoria C # LINQ: todas las combinaciones de un conjunto sin el conjunto vacío

Tengo un conjunto de cadenas y quiero encontrar todas las combinaciones posibles de las cadenas y agregarlas a una lista. Quiero terminar con una lista de una lista de cada combinación de cadenas, menos el conjunto vacío.

He creado una solución que hace esto exactamente con un bucle anidado. sin embargoQuiero hacer esto con más elegancia, preferiblemente con LINQ, y no soy tan competente porque todavía soy bastante nuevo en ello.

La solución debe tener 2 ^ n - 1 listas de combinaciones donde n es la cardinalidad del conjunto original. Aquí hay un ejemplo correcto de lo que estoy buscando:

set = {a, b, c}

completedListOfCombinations = 
{
    {a},
    {b},
    {a, b},
    {c},
    {a, c},
    {b, c},
    {a, b, c}
}

Aquí está mi solución funcional, básica pero fea que diseñé con ayuda de:https://stackoverflow.com/a/3319652/3371287

List<string> myStrings =  new List<string> { "a", "b", "c" };

var allCombos = new List<List<string>>();

for (int i = 0; i < myStrings.Count; i++)
{
    int subsetCount = allCombos.Count;
    var m = new List<string>();
    m.Add(myStrings[i]);
    allCombos.Add(m);

    for (int j = 0; j < subsetCount; j++)
    {
        string[] subset = new string[allCombos.ElementAt(j).Count + 1];
        allCombos[j].CopyTo(subset, 0);
        subset[subset.Length - 1] = myStrings[i];
        allCombos.Add(subset.ToList());
    }

}

¿Alguien puede mostrarme una solución más elegante para esto? He visto soluciones similares de LINQ que crean pares y listas cartesianas con un umbral, pero no he podido ajustarlas a lo que necesito.

Respuestas a la pregunta(1)

Su respuesta a la pregunta